Re: Баг парсинга ip адресов при сборке с --with-ipv6
Maxim Dounin
mdounin на mdounin.ru
Ср Апр 13 15:30:02 MSD 2011
Hello!
On Tue, Apr 12, 2011 at 09:57:31PM -0400, INF[SZ] wrote:
> При включении опции сборки --with-ipv6 и
> внесении в локацию ip адреса в котором
> забыта точка между 2 и 3 октетом получаю
> ошибку сегментирования
>
> Например
>
> location / {
>
> root /usr/share/nginx/html;
>
> index index.html index.htm;
>
> allow 80.24797.12;
>
> }
>
> nginx -t
> ошибка сегментирования
>
> при сборке Nginx без поддержки ipv6 при том
> же конфиге парсинг проходит удачно и на
> выходе как и положено получаю ошибку:
>
> nginx: [emerg]: invalid parameter "80.24797.12" in
> /etc/nginx/nginx.conf:54
> nginx: configuration file /etc/nginx/nginx.conf test failed
>
>
> Проверял на Nginx 0.8, 0.9, 1.0 ветках.
Спасибо. Патч прилагается.
Maxim Dounin
-------------- next part --------------
# HG changeset patch
# User Maxim Dounin <mdounin at mdounin.ru>
# Date 1302694009 -14400
# Node ID c0045a9cf3218bd4f77ecb8c0a5e75ad47a436f9
# Parent 00d13b6d4ebd225f94a2e2a3afa7dbd3ddfe4ed7
Fix ipv6 address parsing.
Parsing icorrectly formated addresses caused segmentation fault in some
cases, e.g. as in
allow 80.24797.12;
(note missing dot - this is not valid ipv4 address and hence nginx will
attempt to parse it as ipv6 one if configured with ipv6), or
listen [127.0.0.1]:8080;
(note ipv4 address instead of ipv6 one in square brackets).
See here for original report:
http://forum.nginx.org/read.php?21,190741,190741#msg-190741
diff --git a/src/core/ngx_inet.c b/src/core/ngx_inet.c
--- a/src/core/ngx_inet.c
+++ b/src/core/ngx_inet.c
@@ -110,7 +110,7 @@ ngx_inet6_addr(u_char *p, size_t len, u_
}
if (c == '.' && nibbles) {
- if (n < 2) {
+ if (n < 2 || digit == NULL) {
return NGX_ERROR;
}
Подробная информация о списке рассылки nginx-ru