]> git.kaiwu.me - njs.git/commitdiff
Fix in String.indexOf() and String.lastIndexOf() functions.
authorIgor Sysoev <igor@sysoev.ru>
Fri, 29 Apr 2016 14:02:52 +0000 (17:02 +0300)
committerIgor Sysoev <igor@sysoev.ru>
Fri, 29 Apr 2016 14:02:52 +0000 (17:02 +0300)
njs/njs_string.c

index 2f979b8dbb499e2fd5fd8ceb823ec40b0063bb60..d4a07b1c7b0cee9032964f47da208bc134c369f4 100644 (file)
@@ -1192,25 +1192,36 @@ njs_string_index_of(njs_vm_t *vm, njs_value_t *src, njs_value_t *search_string,
 
     if (index < length) {
 
-        p = string.start;
-        end = p + string.size;
-
         if (string.size == length) {
             /* Byte or ASCII string. */
-            p += index;
+            p = string.start + index;
+            end = (string.start + string.size) - (search.size - 1);
+
+            while (p < end) {
+                if (memcmp(p, search.start, search.size) == 0) {
+                    return index;
+                }
+
+                index++;
+                p++;
+            }
 
         } else {
             /* UTF-8 string. */
-            p = njs_string_offset(p, end, index);
-        }
+            end = string.start + string.size;
 
-        while (p < end) {
-            if (memcmp(p, search.start, search.size) == 0) {
-                return index;
-            }
+            p = njs_string_offset(string.start, end, index);
 
-            index++;
-            p = nxt_utf8_next(p, end);
+            end -= search.size - 1;
+
+            while (p < end) {
+                if (memcmp(p, search.start, search.size) == 0) {
+                    return index;
+                }
+
+                index++;
+                p = nxt_utf8_next(p, end);
+            }
         }
 
     } else if (search.size == 0) {