diff options
author | Igor Sysoev <igor@sysoev.ru> | 2011-11-09 13:54:07 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2011-11-09 13:54:07 +0000 |
commit | eb499bab59d2a75b2abb028139ece53a5ddbd8d8 (patch) | |
tree | baebac6f7d4751367460ef99adf8f96322702060 /src | |
parent | d0bcad344544d164f3e23310d00d42f3de9743e9 (diff) | |
download | nginx-eb499bab59d2a75b2abb028139ece53a5ddbd8d8.tar.gz nginx-eb499bab59d2a75b2abb028139ece53a5ddbd8d8.zip |
Fixed compression pointer processing in DNS response greater than 255 bytes.
Thanks to Ben Hawkes.
Diffstat (limited to 'src')
-rw-r--r-- | src/core/ngx_resolver.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c index 268faa456..35818a7ae 100644 --- a/src/core/ngx_resolver.c +++ b/src/core/ngx_resolver.c @@ -1952,7 +1952,13 @@ done: n = *src++; for ( ;; ) { - if (n != 0xc0) { + if (n & 0xc0) { + n = ((n & 0x3f) << 8) + *src; + src = &buf[n]; + + n = *src++; + + } else { ngx_memcpy(dst, src, n); dst += n; src += n; @@ -1962,12 +1968,6 @@ done: if (n != 0) { *dst++ = '.'; } - - } else { - n = ((n & 0x3f) << 8) + *src; - src = &buf[n]; - - n = *src++; } if (n == 0) { |