aboutsummaryrefslogtreecommitdiff
path: root/src/core/ngx_regex.c
diff options
context:
space:
mode:
authorMaxim Dounin <mdounin@mdounin.ru>2023-10-17 02:39:38 +0300
committerMaxim Dounin <mdounin@mdounin.ru>2023-10-17 02:39:38 +0300
commit284a0c73771e3a2c57af6e74d96d9a6878b2e7b4 (patch)
tree258499d824cb10d28328fb868105cf7f2c5e8818 /src/core/ngx_regex.c
parent6ceef192e7af1c507826ac38a2d43f08bf265fb9 (diff)
downloadnginx-284a0c73771e3a2c57af6e74d96d9a6878b2e7b4.tar.gz
nginx-284a0c73771e3a2c57af6e74d96d9a6878b2e7b4.zip
Core: fixed memory leak on configuration reload with PCRE2.
In ngx_regex_cleanup() allocator wasn't configured when calling pcre2_compile_context_free() and pcre2_match_data_free(), resulting in no ngx_free() call and leaked memory. Fix is ensure that allocator is configured for global allocations, so that ngx_free() is actually called to free memory. Additionally, ngx_regex_compile_context was cleared in ngx_regex_module_init(). It should be either not cleared, so it will be freed by ngx_regex_cleanup(), or properly freed. Fix is to not clear it, so ngx_regex_cleanup() will be able to free it. Reported by ZhenZhong Wu, https://mailman.nginx.org/pipermail/nginx-devel/2023-September/3Z5FIKUDRN2WBSL3JWTZJ7SXDA6YIWPB.html
Diffstat (limited to 'src/core/ngx_regex.c')
-rw-r--r--src/core/ngx_regex.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/core/ngx_regex.c b/src/core/ngx_regex.c
index 91381f499..5b13c5db3 100644
--- a/src/core/ngx_regex.c
+++ b/src/core/ngx_regex.c
@@ -600,6 +600,8 @@ ngx_regex_cleanup(void *data)
* the new cycle, these will be re-allocated.
*/
+ ngx_regex_malloc_init(NULL);
+
if (ngx_regex_compile_context) {
pcre2_compile_context_free(ngx_regex_compile_context);
ngx_regex_compile_context = NULL;
@@ -611,6 +613,8 @@ ngx_regex_cleanup(void *data)
ngx_regex_match_data_size = 0;
}
+ ngx_regex_malloc_done();
+
#endif
}
@@ -706,9 +710,6 @@ ngx_regex_module_init(ngx_cycle_t *cycle)
ngx_regex_malloc_done();
ngx_regex_studies = NULL;
-#if (NGX_PCRE2)
- ngx_regex_compile_context = NULL;
-#endif
return NGX_OK;
}