summaryrefslogtreecommitdiffstats
path: root/avahi-core/dns.c
diff options
context:
space:
mode:
Diffstat (limited to 'avahi-core/dns.c')
-rw-r--r--avahi-core/dns.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/avahi-core/dns.c b/avahi-core/dns.c
index a3ec0e6..b31aa20 100644
--- a/avahi-core/dns.c
+++ b/avahi-core/dns.c
@@ -332,6 +332,7 @@ static int consume_labels(AvahiDnsPacket *p, unsigned idx, char *ret_name, size_
int ret = 0;
int compressed = 0;
int first_label = 1;
+ unsigned label_ptr;
int i;
assert(p && ret_name && l);
@@ -385,7 +386,12 @@ static int consume_labels(AvahiDnsPacket *p, unsigned idx, char *ret_name, size_
if (idx+2 > p->size)
return -1;
- idx = ((unsigned) (AVAHI_DNS_PACKET_DATA(p)[idx] & ~0xC0)) << 8 | AVAHI_DNS_PACKET_DATA(p)[idx+1];
+ label_ptr = ((unsigned) (AVAHI_DNS_PACKET_DATA(p)[idx] & ~0xC0)) << 8 | AVAHI_DNS_PACKET_DATA(p)[idx+1];
+
+ if ((label_ptr < AVAHI_DNS_PACKET_HEADER_SIZE) || (label_ptr >= idx))
+ return -1;
+
+ idx = label_ptr;
if (!compressed)
ret += 2;