diff options
author | Maxim Dounin <mdounin@mdounin.ru> | 2014-09-08 21:35:53 +0400 |
---|---|---|
committer | Maxim Dounin <mdounin@mdounin.ru> | 2014-09-08 21:35:53 +0400 |
commit | c5bee22d167486537ed9f36941dc4e0abdef1fce (patch) | |
tree | e897012e973f4120c25dd61cec685f92453afccd /src/core/ngx_regex.c | |
parent | 2af7181b3bb5b4bd84ca448f300c6aaf3dff4681 (diff) | |
download | nginx-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.c | 14 |
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; } |