aboutsummaryrefslogtreecommitdiff
path: root/src/core/ngx_regex.c
diff options
context:
space:
mode:
authorMaxim Dounin <mdounin@mdounin.ru>2014-09-08 21:35:53 +0400
committerMaxim Dounin <mdounin@mdounin.ru>2014-09-08 21:35:53 +0400
commitc5bee22d167486537ed9f36941dc4e0abdef1fce (patch)
treee897012e973f4120c25dd61cec685f92453afccd /src/core/ngx_regex.c
parent2af7181b3bb5b4bd84ca448f300c6aaf3dff4681 (diff)
downloadnginx-c5bee22d167486537ed9f36941dc4e0abdef1fce.tar.gz
nginx-c5bee22d167486537ed9f36941dc4e0abdef1fce.zip
Core: ngx_regex_compile() error handling fixes.
Now we actually return NGX_ERROR on errors, and provide an error string for memory allocation errors. Reported by Markus Linnala.
Diffstat (limited to 'src/core/ngx_regex.c')
-rw-r--r--src/core/ngx_regex.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/core/ngx_regex.c b/src/core/ngx_regex.c
index 3771aab8e..30acca5fc 100644
--- a/src/core/ngx_regex.c
+++ b/src/core/ngx_regex.c
@@ -149,7 +149,7 @@ ngx_regex_compile(ngx_regex_compile_t *rc)
rc->regex = ngx_pcalloc(rc->pool, sizeof(ngx_regex_t));
if (rc->regex == NULL) {
- return NGX_ERROR;
+ goto nomem;
}
rc->regex->code = re;
@@ -159,7 +159,7 @@ ngx_regex_compile(ngx_regex_compile_t *rc)
if (ngx_pcre_studies != NULL) {
elt = ngx_list_push(ngx_pcre_studies);
if (elt == NULL) {
- return NGX_ERROR;
+ goto nomem;
}
elt->regex = rc->regex;
@@ -204,7 +204,15 @@ failed:
rc->err.len = ngx_snprintf(rc->err.data, rc->err.len, p, &rc->pattern, n)
- rc->err.data;
- return NGX_OK;
+ return NGX_ERROR;
+
+nomem:
+
+ rc->err.len = ngx_snprintf(rc->err.data, rc->err.len,
+ "regex \"%V\" compilation failed: no memory",
+ &rc->pattern)
+ - rc->err.data;
+ return NGX_ERROR;
}