details: https://hg.nginx.org/njs/rev/9c67f7d03672 branches: changeset: 900:9c67f7d03672 user: Dmitry Volyntsev <xei...@nginx.com> date: Wed Apr 17 21:12:21 2019 +0300 description: Fixed Regexp.prototype.exec() for unicode only regexps.
This closes #138 issue on Github. diffstat: njs/njs_regexp.c | 8 +++++--- njs/test/njs_unit_test.c | 3 +++ 2 files changed, 8 insertions(+), 3 deletions(-) diffs (51 lines): diff -r 39790a9d9b58 -r 9c67f7d03672 njs/njs_regexp.c --- a/njs/njs_regexp.c Wed Apr 17 18:43:13 2019 +0300 +++ b/njs/njs_regexp.c Wed Apr 17 21:12:21 2019 +0300 @@ -334,6 +334,8 @@ njs_regexp_pattern_create(njs_vm_t *vm, 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_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, value = &args[1]; } else { - value = (njs_value_t *) &njs_string_undefined; + value = &njs_string_undefined; } regexp = args[0].data.u.regexp; diff -r 39790a9d9b58 -r 9c67f7d03672 njs/test/njs_unit_test.c --- a/njs/test/njs_unit_test.c Wed Apr 17 18:43:13 2019 +0300 +++ b/njs/test/njs_unit_test.c Wed Apr 17 21:12:21 2019 +0300 @@ -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("тест") }, }; _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel