njs_index_t unused)
{
u_char *r;
- size_t length, search_length, ret_length, size;
+ size_t length, size;
int64_t pos;
njs_int_t ret;
njs_value_t *this, *search, *replace;
}
}
- length = njs_string_prop(&string, this);
- search_length = njs_string_prop(&s, search);
+ (void) njs_string_prop(&string, this);
+ (void) njs_string_prop(&s, search);
pos = njs_string_index_of(&string, &s, 0);
if (pos < 0) {
}
}
- if (length == string.size) {
+ if (njs_is_byte_or_ascii_string(&string)) {
p = string.start + pos;
} else {
p = njs_string_offset(string.start, string.start + string.size, pos);
}
- ret_length = njs_string_prop(&ret_string, &retval);
+ (void) njs_string_prop(&ret_string, &retval);
+
+ size = string.size + ret_string.size - s.size;
+ length = string.length + ret_string.length - s.length;
- size = string.size + ret_string.size - s.size;
- length += ret_length - search_length;
+ if (njs_is_byte_string(&string)
+ || njs_is_byte_string(&s)
+ || njs_is_byte_string(&ret_string))
+ {
+ length = 0;
+ }
r = njs_string_alloc(vm, &vm->retval, size, length);
if (njs_slow_path(r == NULL)) {
{ njs_str("var r = 'αβγ'.replace('', 'X'); [r, r.length]"),
njs_str("Xαβγ,4") },
+ { njs_str("var s = 'αz'.toUTF8();"
+ "var r = s.replace('z', 'β');"
+ "r.length"),
+ njs_str("4") },
+
{ njs_str("'abc'.replace('b', (m, o, s) => `|${s}|${o}|${m}|`)"),
njs_str("a|abc|1|b|c") },