]> granicus.if.org Git - php/commitdiff
Merge remote-tracking branch 'php/master'
authorAnatol Belski <ab@php.net>
Tue, 19 Aug 2014 07:58:35 +0000 (09:58 +0200)
committerAnatol Belski <ab@php.net>
Tue, 19 Aug 2014 07:58:35 +0000 (09:58 +0200)
Conflicts:
ext/standard/dns.c

1  2 
ext/standard/dns.c

index c760fc0713bbc84a4b74fd5833c63b1d323ee931,06df38518eacb294a1cfb513128a9e704fd6e76c..3ad926820dddb207c7106db9597ded383cdc6e76
@@@ -465,9 -474,10 +474,10 @@@ static u_char *php_parserr(u_char *cp, 
                        cp += dlen;
                        break;
                case DNS_T_MX:
+                       CHECKCP(2);
                        add_assoc_string(subarray, "type", "MX");
                        GETSHORT(n, cp);
 -                      add_assoc_long(subarray, "pri", n);
 +                      add_assoc_int(subarray, "pri", n);
                        /* no break; */
                case DNS_T_CNAME:
                        if (type == DNS_T_CNAME) {
                        }
                        cp += n;
                        add_assoc_string(subarray, "rname", name);
+                       CHECKCP(5*4);
                        GETLONG(n, cp);
 -                      add_assoc_long(subarray, "serial", n);
 +                      add_assoc_int(subarray, "serial", n);
                        GETLONG(n, cp);
 -                      add_assoc_long(subarray, "refresh", n);
 +                      add_assoc_int(subarray, "refresh", n);
                        GETLONG(n, cp);
 -                      add_assoc_long(subarray, "retry", n);
 +                      add_assoc_int(subarray, "retry", n);
                        GETLONG(n, cp);
 -                      add_assoc_long(subarray, "expire", n);
 +                      add_assoc_int(subarray, "expire", n);
                        GETLONG(n, cp);
 -                      add_assoc_long(subarray, "minimum-ttl", n);
 +                      add_assoc_int(subarray, "minimum-ttl", n);
                        break;
                case DNS_T_AAAA:
                        tp = (u_char*)name;
                case DNS_T_A6:
                        p = cp;
                        add_assoc_string(subarray, "type", "A6");
+                       CHECKCP(1);
                        n = ((int)cp[0]) & 0xFF;
                        cp++;
 -                      add_assoc_long(subarray, "masklen", n);
 +                      add_assoc_int(subarray, "masklen", n);
                        tp = (u_char*)name;
                        if (n > 15) {
                                have_v6_break = 1;
                        }
                        break;
                case DNS_T_SRV:
+                       CHECKCP(3*2);
                        add_assoc_string(subarray, "type", "SRV");
                        GETSHORT(n, cp);
 -                      add_assoc_long(subarray, "pri", n);
 +                      add_assoc_int(subarray, "pri", n);
                        GETSHORT(n, cp);
 -                      add_assoc_long(subarray, "weight", n);
 +                      add_assoc_int(subarray, "weight", n);
                        GETSHORT(n, cp);
 -                      add_assoc_long(subarray, "port", n);
 +                      add_assoc_int(subarray, "port", n);
-                       n = dn_expand(answer->qb2, answer->qb2+65536, cp, name, (sizeof name) - 2);
+                       n = dn_expand(answer->qb2, end, cp, name, (sizeof name) - 2);
                        if (n < 0) {
                                return NULL;
                        }
                        add_assoc_string(subarray, "target", name);
                        break;
                case DNS_T_NAPTR:
+                       CHECKCP(2*2);
                        add_assoc_string(subarray, "type", "NAPTR");
                        GETSHORT(n, cp);
 -                      add_assoc_long(subarray, "order", n);
 +                      add_assoc_int(subarray, "order", n);
                        GETSHORT(n, cp);
 -                      add_assoc_long(subarray, "pref", n);
 +                      add_assoc_int(subarray, "pref", n);
+                       CHECKCP(1);
                        n = (cp[0] & 0xFF);
-                       add_assoc_stringl(subarray, "flags", (char*)++cp, n);
+                       cp++;
+                       CHECKCP(n);
+                       add_assoc_stringl(subarray, "flags", (char*)cp, n);
                        cp += n;
+                       CHECKCP(1);
                        n = (cp[0] & 0xFF);
-                       add_assoc_stringl(subarray, "services", (char*)++cp, n);
+                       cp++;
+                       CHECKCP(n);
+                       add_assoc_stringl(subarray, "services", (char*)cp, n);
                        cp += n;
+                       CHECKCP(1);
                        n = (cp[0] & 0xFF);
-                       add_assoc_stringl(subarray, "regex", (char*)++cp, n);
+                       cp++;
+                       CHECKCP(n);
+                       add_assoc_stringl(subarray, "regex", (char*)cp, n);
                        cp += n;
-                       n = dn_expand(answer->qb2, answer->qb2+65536, cp, name, (sizeof name) - 2);
+                       n = dn_expand(answer->qb2, end, cp, name, (sizeof name) - 2);
                        if (n < 0) {
                                return NULL;
                        }