(void) njs_string_prop(&string, &args[0]);
- if (string.size == 0) {
- vm->retval = njs_string_empty;
- return NXT_OK;
- }
-
if (nargs > 1) {
- max = NJS_STRING_MAX_LENGTH / string.size;
+ max = (string.size > 1) ? NJS_STRING_MAX_LENGTH / string.size
+ : NJS_STRING_MAX_LENGTH;
+
n = args[1].data.u.number;
- if (nxt_slow_path(n < 0 || n > max)) {
+ if (nxt_slow_path(n < 0 || n >= max)) {
vm->exception = &njs_exception_range_error;
return NXT_ERROR;
}
}
+ if (string.size == 0) {
+ vm->retval = njs_string_empty;
+ return NXT_OK;
+ }
+
size = string.size * n;
length = string.length * n;
{ nxt_string("'abc'.repeat(-1)"),
nxt_string("RangeError") },
+ { nxt_string("''.repeat(-1)"),
+ nxt_string("RangeError") },
+
+ { nxt_string("'a'.repeat(2147483647)"),
+ nxt_string("RangeError") },
+
+ { nxt_string("'a'.repeat(2147483648)"),
+ nxt_string("RangeError") },
+
+ { nxt_string("'a'.repeat(Infinity)"),
+ nxt_string("RangeError") },
+
+ { nxt_string("'a'.repeat(NaN)"),
+ nxt_string("") },
+
+ { nxt_string("''.repeat(2147483646)"),
+ nxt_string("") },
+
+ /* ES6: "". */
+ { nxt_string("''.repeat(2147483647)"),
+ nxt_string("RangeError") },
+
+ { nxt_string("''.repeat(2147483648)"),
+ nxt_string("RangeError") },
+
+ { nxt_string("''.repeat(Infinity)"),
+ nxt_string("RangeError") },
+
+ { nxt_string("''.repeat(NaN)"),
+ nxt_string("") },
+
{ nxt_string("encodeURI()"),
nxt_string("undefined")},