From f7c74f0dea69846c06f0f6b1ce4294d3a6682663 Mon Sep 17 00:00:00 2001 From: Igor Sysoev Date: Mon, 5 Dec 2016 17:47:00 +0300 Subject: [PATCH] RegExp.prototype.toString() should be applied only to RegExp. --- njs/njs_regexp.c | 19 ++++++++++++++----- njs/test/njs_unit_test.c | 3 +++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/njs/njs_regexp.c b/njs/njs_regexp.c index 52cbafb2..74e9ab1c 100644 --- a/njs/njs_regexp.c +++ b/njs/njs_regexp.c @@ -560,15 +560,24 @@ njs_regexp_prototype_to_string(njs_vm_t *vm, njs_value_t *args, u_char *source; int32_t length; uint32_t size; + njs_value_t *value; njs_regexp_pattern_t *pattern; - pattern = args[0].data.u.regexp->pattern; - source = pattern->source; + value = &args[0]; - size = strlen((char *) source); - length = nxt_utf8_length(source, size); + if (value->type == NJS_REGEXP) { + pattern = value->data.u.regexp->pattern; + source = pattern->source; - return njs_regexp_string_create(vm, &vm->retval, source, size, length); + size = strlen((char *) source); + length = nxt_utf8_length(source, size); + + return njs_regexp_string_create(vm, &vm->retval, source, size, length); + } + + vm->exception = &njs_exception_type_error; + + return NXT_ERROR; } diff --git a/njs/test/njs_unit_test.c b/njs/test/njs_unit_test.c index a2150754..c5cf0da2 100644 --- a/njs/test/njs_unit_test.c +++ b/njs/test/njs_unit_test.c @@ -4410,6 +4410,9 @@ static njs_unit_test_t njs_test[] = { nxt_string("var r = new RegExp('abc', 'i'); r.test('00ABC11')"), nxt_string("true") }, + { nxt_string("[0].map(RegExp().toString)"), + nxt_string("TypeError") }, + /* Non-standard ECMA-262 features. */ /* 0x10400 is not a surrogate pair of 0xD801 and 0xDC00. */ -- 2.47.3