]> git.kaiwu.me - nginx.git/commitdiff
Core: ngx_regex_compile() error handling fixes.
authorMaxim Dounin <mdounin@mdounin.ru>
Mon, 8 Sep 2014 17:35:53 +0000 (21:35 +0400)
committerMaxim Dounin <mdounin@mdounin.ru>
Mon, 8 Sep 2014 17:35:53 +0000 (21:35 +0400)
Now we actually return NGX_ERROR on errors, and provide an error
string for memory allocation errors.

Reported by Markus Linnala.

src/core/ngx_regex.c

index 3771aab8ee76285498f01396d29dd17c4d080156..30acca5fcece281a8a0d54e72a1abccd79cd8ccb 100644 (file)
@@ -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;
 }