]> git.kaiwu.me - njs.git/commitdiff
Fixed String.prototype.indexOf() for byte-strings.
authorDmitry Volyntsev <xeioex@nginx.com>
Wed, 26 Aug 2020 14:56:47 +0000 (14:56 +0000)
committerDmitry Volyntsev <xeioex@nginx.com>
Wed, 26 Aug 2020 14:56:47 +0000 (14:56 +0000)
The issue was introduced in e8a941b394a3 (0.4.3).

This closes #335 issue on Github.

src/njs_string.c
src/test/njs_unit_test.c

index bbd96224352bbf2311a5318fca30342b570ad429..bf88622f5f8236730f690f06030fc4d3af1cd686 100644 (file)
@@ -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));
 
index 0621bfb6a80280330095dd319a49a3479315402e..f55c899bfd0211e71ab994d43d9eec5d15d07594 100644 (file)
@@ -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") },