length = self.length;
- if (length == 0) {
- return JS_NewInt32(ctx, -1);
- }
-
if (last) {
from = length - 1;
to = -1;
return JS_EXCEPTION;
}
- if (last) {
- if (from >= 0) {
- from = njs_min(from, length - 1);
-
- } else if (from < 0) {
- from += length;
- }
-
- if (from <= to) {
- return JS_NewInt32(ctx, -1);
- }
+ if (from >= 0) {
+ from = njs_min(from, length);
} else {
- if (from < 0) {
- from += length;
-
- if (from < 0) {
- from = 0;
- }
- }
-
- if (from >= to) {
- return JS_NewInt32(ctx, -1);
- }
+ from = njs_max(0, length + from);
}
}
"or Buffer-like object");
}
- if (str.length == 0) {
- JS_FreeValue(ctx, buffer);
- return JS_NewInt32(ctx, (last) ? length : 0);
- }
-
if (last) {
from = njs_min(from, length - (int64_t) str.length);
}
}
+ if (from == to && str.length == 0) {
+ JS_FreeValue(ctx, buffer);
+ return JS_NewInt32(ctx, 0);
+ }
+
for (i = from; i != to; i += increment) {
if (memcmp(&self.start[i], str.start, str.length) == 0) {
JS_FreeValue(ctx, buffer);
{ buf: Buffer.from('abcdef'), value: 'def', offset: 1, expected: 3 },
{ buf: Buffer.from('abcdef'), value: 'def', offset: -3, expected: 3 },
{ buf: Buffer.from('abcdef'), value: 'efgh', offset: 4, expected: -1 },
+ { buf: Buffer.from(''), value: '', expected: 0 },
+ { buf: Buffer.from(''), value: '', offset: -1, expected: 0 },
+ { buf: Buffer.from(''), value: '', offset: 0, expected: 0 },
+ { buf: Buffer.from(''), value: '', offset: 1, expected: 0 },
+ { buf: Buffer.from('abc'), value: '', offset: -4, expected: 0 },
+ { buf: Buffer.from('abc'), value: '', offset: -3, expected: 0 },
+ { buf: Buffer.from('abc'), value: '', offset: -2, expected: 1 },
+ { buf: Buffer.from('abc'), value: '', offset: -1, expected: 2 },
+ { buf: Buffer.from('abc'), value: '', offset: 0, expected: 0 },
+ { buf: Buffer.from('abc'), value: '', offset: 1, expected: 1 },
+ { buf: Buffer.from('abc'), value: '', offset: 2, expected: 2 },
+ { buf: Buffer.from('abc'), value: '', offset: 3, expected: 3 },
+ { buf: Buffer.from('abc'), value: '', offset: 4, expected: 3 },
{ buf: Buffer.from('abcdef'), value: '626364', encoding: 'hex', expected: 1 },
{ buf: Buffer.from('abcdef'), value: '626364', encoding: 'utf-128',
exception: 'TypeError: "utf-128" encoding is not supported' },
{ buf: Buffer.from('abcdef'), value: 'abc', offset: 1, expected: 0 },
{ buf: Buffer.from('abcdef'), value: 'def', offset: 1, expected: -1 },
{ buf: Buffer.from('xxxABCx'), value: 'ABC', offset: 3, expected: 3 },
+ { buf: Buffer.from(''), value: '', expected: 0 },
+ { buf: Buffer.from(''), value: '', offset: -1, expected: 0 },
+ { buf: Buffer.from(''), value: '', offset: 0, expected: 0 },
+ { buf: Buffer.from(''), value: '', offset: 1, expected: 0 },
+ { buf: Buffer.from('abc'), value: '', offset: -4, expected: 0 },
+ { buf: Buffer.from('abc'), value: '', offset: -3, expected: 0 },
+ { buf: Buffer.from('abc'), value: '', offset: -2, expected: 1 },
+ { buf: Buffer.from('abc'), value: '', offset: -1, expected: 2 },
+ { buf: Buffer.from('abc'), value: '', offset: 0, expected: 0 },
+ { buf: Buffer.from('abc'), value: '', offset: 1, expected: 1 },
+ { buf: Buffer.from('abc'), value: '', offset: 2, expected: 2 },
+ { buf: Buffer.from('abc'), value: '', offset: 3, expected: 3 },
+ { buf: Buffer.from('abc'), value: '', offset: 4, expected: 3 },
{ buf: Buffer.from(Buffer.alloc(7).fill('Zabcdef').buffer, 1), value: 'abcdef', expected: 0 },
{ buf: Buffer.from(Buffer.alloc(7).fill('Zabcdef').buffer, 1), value: 'abcdefg', expected: -1 },
{ buf: Buffer.from('abcdef'), value: '626364', encoding: 'hex', expected: 1 },