]> git.kaiwu.me - njs.git/commitdiff
RegExp: improved memory footprint when match fails.
authorDmitry Volyntsev <xeioex@nginx.com>
Fri, 29 Sep 2023 02:09:56 +0000 (19:09 -0700)
committerDmitry Volyntsev <xeioex@nginx.com>
Fri, 29 Sep 2023 02:09:56 +0000 (19:09 -0700)
src/njs_regexp.c

index 37d95d292ed943cc031db17b33e5355e1970e691..d57b4e5de47b3e450f237d0196d99ea98d69866d 100644 (file)
@@ -941,6 +941,9 @@ njs_regexp_builtin_exec(njs_vm_t *vm, njs_value_t *r, njs_value_t *s,
                            string.size, match_data);
     if (ret >= 0) {
         result = njs_regexp_exec_result(vm, r, utf8, &string, match_data);
+
+        njs_regex_match_data_free(match_data, vm->regex_generic_ctx);
+
         if (njs_slow_path(result == NULL)) {
             return NJS_ERROR;
         }
@@ -949,8 +952,9 @@ njs_regexp_builtin_exec(njs_vm_t *vm, njs_value_t *r, njs_value_t *s,
         return NJS_OK;
     }
 
+    njs_regex_match_data_free(match_data, vm->regex_generic_ctx);
+
     if (njs_slow_path(ret == NJS_ERROR)) {
-        njs_regex_match_data_free(match_data, vm->regex_generic_ctx);
         return NJS_ERROR;
     }
 
@@ -1154,8 +1158,6 @@ fail:
 
 done:
 
-    njs_regex_match_data_free(match_data, vm->regex_generic_ctx);
-
     return (ret == NJS_OK) ? array : NULL;
 }