]> git.kaiwu.me - njs.git/commitdiff
Fixed Regexp.prototype.exec() for unicode only regexps.
authorDmitry Volyntsev <xeioex@nginx.com>
Wed, 17 Apr 2019 18:12:21 +0000 (21:12 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Wed, 17 Apr 2019 18:12:21 +0000 (21:12 +0300)
This closes #138 issue on Github.

njs/njs_regexp.c
njs/test/njs_unit_test.c

index 2a9fbe410cf9a622ff4dcf25dd79974ec78f5ce0..3fe6eec368b6c0bc9e903e168f8c38aa85dc9de3 100644 (file)
@@ -334,6 +334,8 @@ njs_regexp_pattern_create(njs_vm_t *vm, u_char *start, size_t length,
             goto fail;
         }
 
+        pattern->ncaptures = ret;
+
     } else if (ret != NXT_DECLINED) {
         goto fail;
     }
@@ -633,14 +635,14 @@ njs_regexp_prototype_exec(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
 {
     njs_ret_t               ret;
     njs_utf8_t              utf8;
-    njs_value_t             *value;
     njs_regexp_t            *regexp;
     njs_string_prop_t       string;
     njs_regexp_utf8_t       type;
+    const njs_value_t       *value;
     njs_regexp_pattern_t    *pattern;
     nxt_regex_match_data_t  *match_data;
 
-    if (!njs_is_regexp(&args[0])) {
+    if (!njs_is_regexp(njs_arg(args, nargs, 0))) {
         njs_type_error(vm, "\"this\" argument is not a regexp");
         return NXT_ERROR;
     }
@@ -649,7 +651,7 @@ njs_regexp_prototype_exec(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         value = &args[1];
 
     } else {
-        value = (njs_value_t *) &njs_string_undefined;
+        value = &njs_string_undefined;
     }
 
     regexp = args[0].data.u.regexp;
index 669dfc363ef98513710c01dc0dfd2b968ae25a82..a50f40c9753ba32670a89c399cbb842be6ead743 100644 (file)
@@ -11980,6 +11980,9 @@ static njs_unit_test_t  njs_regexp_test[] =
 
     { nxt_string("RegExp('[\\\\u0430-\\\\u044f]+').test('тест')"),
       nxt_string("true") },
+
+    { nxt_string("RegExp('[\\\\u0430-\\\\u044f]+').exec('тест')[0]"),
+      nxt_string("тест") },
 };