Mercurial > hg > nginx
comparison src/core/ngx_resolver.c @ 4287:7740d2a8d55b stable-1.0
Merge of r4268:
Fixed compression pointer processing in DNS response greater than 255 bytes.
Thanks to Ben Hawkes.
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 14 Nov 2011 16:12:25 +0000 |
parents | 159b58f9c0bd |
children | 4919fb357a5d |
comparison
equal
deleted
inserted
replaced
4286:8d6c2f2c0d2a | 4287:7740d2a8d55b |
---|---|
1920 name->data = dst; | 1920 name->data = dst; |
1921 | 1921 |
1922 n = *src++; | 1922 n = *src++; |
1923 | 1923 |
1924 for ( ;; ) { | 1924 for ( ;; ) { |
1925 if (n != 0xc0) { | 1925 if (n & 0xc0) { |
1926 n = ((n & 0x3f) << 8) + *src; | |
1927 src = &buf[n]; | |
1928 | |
1929 n = *src++; | |
1930 | |
1931 } else { | |
1926 ngx_memcpy(dst, src, n); | 1932 ngx_memcpy(dst, src, n); |
1927 dst += n; | 1933 dst += n; |
1928 src += n; | 1934 src += n; |
1929 | 1935 |
1930 n = *src++; | 1936 n = *src++; |
1931 | 1937 |
1932 if (n != 0) { | 1938 if (n != 0) { |
1933 *dst++ = '.'; | 1939 *dst++ = '.'; |
1934 } | 1940 } |
1935 | |
1936 } else { | |
1937 n = ((n & 0x3f) << 8) + *src; | |
1938 src = &buf[n]; | |
1939 | |
1940 n = *src++; | |
1941 } | 1941 } |
1942 | 1942 |
1943 if (n == 0) { | 1943 if (n == 0) { |
1944 name->len = dst - name->data; | 1944 name->len = dst - name->data; |
1945 return NGX_OK; | 1945 return NGX_OK; |