From 69c44a49b511619555a3d91d870004e7a6e04bbe Mon Sep 17 00:00:00 2001 From: Dmitry Volyntsev Date: Wed, 26 Aug 2020 14:56:47 +0000 Subject: [PATCH] Fixed String.prototype.indexOf() for byte-strings. The issue was introduced in e8a941b394a3 (0.4.3). This closes #335 issue on Github. --- src/njs_string.c | 6 +++--- src/test/njs_unit_test.c | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/njs_string.c b/src/njs_string.c index bbd96224..bf88622f 100644 --- a/src/njs_string.c +++ b/src/njs_string.c @@ -1999,7 +1999,7 @@ static njs_int_t njs_string_prototype_index_of(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, njs_index_t unused) { - int64_t from; + int64_t from, length; njs_int_t ret; njs_value_t *this, *search, *pos, search_lvalue, pos_lvalue; njs_string_prop_t string, s; @@ -2029,10 +2029,10 @@ njs_string_prototype_index_of(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, return ret; } - (void) njs_string_prop(&string, this); + length = njs_string_prop(&string, this); (void) njs_string_prop(&s, search); - from = njs_min(njs_max(from, 0), (int64_t) string.length); + from = njs_min(njs_max(from, 0), length); njs_set_number(&vm->retval, njs_string_index_of(&string, &s, from)); diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index 0621bfb6..f55c899b 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -7649,6 +7649,9 @@ static njs_unit_test_t njs_test[] = { njs_str("var r = new String('undefined').indexOf(x); var x; r"), njs_str("0") }, + { njs_str("'a a'.toUTF8().indexOf('a', 1)"), + njs_str("2") }, + { njs_str("'abc'.lastIndexOf('abcdef')"), njs_str("-1") }, -- 2.47.3