]> git.kaiwu.me - njs.git/commitdiff
RegExp.prototype.toString() should be applied only to RegExp.
authorIgor Sysoev <igor@sysoev.ru>
Mon, 5 Dec 2016 14:47:00 +0000 (17:47 +0300)
committerIgor Sysoev <igor@sysoev.ru>
Mon, 5 Dec 2016 14:47:00 +0000 (17:47 +0300)
njs/njs_regexp.c
njs/test/njs_unit_test.c

index 52cbafb27727303d4ad48883ac432b53caad083a..74e9ab1cfcf05cb61826438ae3f6efe9053693d8 100644 (file)
@@ -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;
 }
 
 
index a21507544da2382a7ffbca25d2a1325180a141c9..c5cf0da26be2bb6d099eebf81be7c88c8c6ef079 100644 (file)
@@ -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. */