Mercurial > hg > nginx-vendor-current
diff src/http/modules/ngx_http_geoip_module.c @ 516:7efcdb937752 NGINX_0_8_10
nginx 0.8.10
*) Bugfix: memory leaks if GeoIP City database was used.
*) Bugfix: in copying temporary files to permanent storage area; the
bug had appeared in 0.8.9.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Mon, 24 Aug 2009 00:00:00 +0400 |
parents | 4b0d7f0bf22b |
children | 2da4537168f8 |
line wrap: on
line diff
--- a/src/http/modules/ngx_http_geoip_module.c +++ b/src/http/modules/ngx_http_geoip_module.c @@ -181,6 +181,7 @@ ngx_http_geoip_city_variable(ngx_http_re { u_long addr; char *val; + size_t len; GeoIPRecord *gr; struct sockaddr_in *sin; ngx_http_geoip_conf_t *gcf; @@ -207,17 +208,32 @@ ngx_http_geoip_city_variable(ngx_http_re val = *(char **) ((char *) gr + data); if (val == NULL) { - goto not_found; + goto no_value; } - v->len = ngx_strlen(val); + len = ngx_strlen(val); + v->data = ngx_pnalloc(r->pool, len); + + if (v->data == NULL) { + GeoIPRecord_delete(gr); + return NGX_ERROR; + } + + ngx_memcpy(v->data, val, len); + + v->len = len; v->valid = 1; v->no_cacheable = 0; v->not_found = 0; - v->data = (u_char *) val; + + GeoIPRecord_delete(gr); return NGX_OK; +no_value: + + GeoIPRecord_delete(gr); + not_found: v->not_found = 1;