comparison src/core/ngx_resolver.c @ 4267:768212ca0745

Fixed compression pointer processing in DNS response greater than 255 bytes. Thanks to Ben Hawkes.
author Igor Sysoev <igor@sysoev.ru>
date Wed, 09 Nov 2011 13:54:07 +0000
parents 016352c19049
children 05031fce7ce8
comparison
equal deleted inserted replaced
4266:4c45306936bb 4267:768212ca0745
1950 name->data = dst; 1950 name->data = dst;
1951 1951
1952 n = *src++; 1952 n = *src++;
1953 1953
1954 for ( ;; ) { 1954 for ( ;; ) {
1955 if (n != 0xc0) { 1955 if (n & 0xc0) {
1956 n = ((n & 0x3f) << 8) + *src;
1957 src = &buf[n];
1958
1959 n = *src++;
1960
1961 } else {
1956 ngx_memcpy(dst, src, n); 1962 ngx_memcpy(dst, src, n);
1957 dst += n; 1963 dst += n;
1958 src += n; 1964 src += n;
1959 1965
1960 n = *src++; 1966 n = *src++;
1961 1967
1962 if (n != 0) { 1968 if (n != 0) {
1963 *dst++ = '.'; 1969 *dst++ = '.';
1964 } 1970 }
1965
1966 } else {
1967 n = ((n & 0x3f) << 8) + *src;
1968 src = &buf[n];
1969
1970 n = *src++;
1971 } 1971 }
1972 1972
1973 if (n == 0) { 1973 if (n == 0) {
1974 name->len = dst - name->data; 1974 name->len = dst - name->data;
1975 return NGX_OK; 1975 return NGX_OK;