From: Igor Sysoev Date: Fri, 29 Apr 2016 14:02:52 +0000 (+0300) Subject: Fix in String.indexOf() and String.lastIndexOf() functions. X-Git-Tag: 0.1.0~21 X-Git-Url: http://www.kaiwu.me/postgresql/commit/?a=commitdiff_plain;h=17a41f5baf0b9ed613036263a4b71d00d7910506;p=njs.git Fix in String.indexOf() and String.lastIndexOf() functions. --- diff --git a/njs/njs_string.c b/njs/njs_string.c index 2f979b8d..d4a07b1c 100644 --- a/njs/njs_string.c +++ b/njs/njs_string.c @@ -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) {