Mercurial > hg > nginx-quic
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; |