| Index: fusl/src/network/dns_parse.c
|
| diff --git a/fusl/src/network/dns_parse.c b/fusl/src/network/dns_parse.c
|
| index 0c7a60112473974601e86ac8fb0712dcb5fe3083..da8689917f885c24b52bc21eff824e226b57b6d0 100644
|
| --- a/fusl/src/network/dns_parse.c
|
| +++ b/fusl/src/network/dns_parse.c
|
| @@ -1,32 +1,41 @@
|
| #include <string.h>
|
|
|
| -int __dns_parse(const unsigned char *r, int rlen, int (*callback)(void *, int, const void *, int, const void *), void *ctx)
|
| -{
|
| - int qdcount, ancount;
|
| - const unsigned char *p;
|
| - int len;
|
| +int __dns_parse(const unsigned char* r,
|
| + int rlen,
|
| + int (*callback)(void*, int, const void*, int, const void*),
|
| + void* ctx) {
|
| + int qdcount, ancount;
|
| + const unsigned char* p;
|
| + int len;
|
|
|
| - if (rlen<12) return -1;
|
| - if ((r[3]&15)) return 0;
|
| - p = r+12;
|
| - qdcount = r[4]*256 + r[5];
|
| - ancount = r[6]*256 + r[7];
|
| - if (qdcount+ancount > 64) return -1;
|
| - while (qdcount--) {
|
| - while (p-r < rlen && *p-1U < 127) p++;
|
| - if (*p>193 || (*p==193 && p[1]>254) || p>r+rlen-6)
|
| - return -1;
|
| - p += 5 + !!*p;
|
| - }
|
| - while (ancount--) {
|
| - while (p-r < rlen && *p-1U < 127) p++;
|
| - if (*p>193 || (*p==193 && p[1]>254) || p>r+rlen-6)
|
| - return -1;
|
| - p += 1 + !!*p;
|
| - len = p[8]*256 + p[9];
|
| - if (p+len > r+rlen) return -1;
|
| - if (callback(ctx, p[1], p+10, len, r) < 0) return -1;
|
| - p += 10 + len;
|
| - }
|
| - return 0;
|
| + if (rlen < 12)
|
| + return -1;
|
| + if ((r[3] & 15))
|
| + return 0;
|
| + p = r + 12;
|
| + qdcount = r[4] * 256 + r[5];
|
| + ancount = r[6] * 256 + r[7];
|
| + if (qdcount + ancount > 64)
|
| + return -1;
|
| + while (qdcount--) {
|
| + while (p - r < rlen && *p - 1U < 127)
|
| + p++;
|
| + if (*p > 193 || (*p == 193 && p[1] > 254) || p > r + rlen - 6)
|
| + return -1;
|
| + p += 5 + !!*p;
|
| + }
|
| + while (ancount--) {
|
| + while (p - r < rlen && *p - 1U < 127)
|
| + p++;
|
| + if (*p > 193 || (*p == 193 && p[1] > 254) || p > r + rlen - 6)
|
| + return -1;
|
| + p += 1 + !!*p;
|
| + len = p[8] * 256 + p[9];
|
| + if (p + len > r + rlen)
|
| + return -1;
|
| + if (callback(ctx, p[1], p + 10, len, r) < 0)
|
| + return -1;
|
| + p += 10 + len;
|
| + }
|
| + return 0;
|
| }
|
|
|