Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions src/node_buffer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1157,8 +1157,8 @@ void IndexOfString(const FunctionCallbackInfo<Value>& args) {
is_forward);
}

args.GetReturnValue().Set(result >= search_end ? -1
: static_cast<int>(result));
args.GetReturnValue().Set(
result >= search_end ? -1 : static_cast<int64_t>(result));
}

void IndexOfBuffer(const FunctionCallbackInfo<Value>& args) {
Expand Down Expand Up @@ -1245,11 +1245,11 @@ void IndexOfBuffer(const FunctionCallbackInfo<Value>& args) {
is_forward);
}

args.GetReturnValue().Set(result >= search_end ? -1
: static_cast<int>(result));
args.GetReturnValue().Set(
result >= search_end ? -1 : static_cast<int64_t>(result));
}

int32_t IndexOfNumberImpl(Local<Value> buffer_obj,
int64_t IndexOfNumberImpl(Local<Value> buffer_obj,
const uint32_t needle,
const int64_t offset_i64,
const int64_t end_i64,
Expand All @@ -1276,7 +1276,7 @@ int32_t IndexOfNumberImpl(Local<Value> buffer_obj,
ptr = nbytes::stringsearch::MemrchrFill(buffer_data, needle, backward_end);
}
const uint8_t* ptr_uint8 = static_cast<const uint8_t*>(ptr);
return ptr != nullptr ? static_cast<int32_t>(ptr_uint8 - buffer_data) : -1;
return ptr != nullptr ? static_cast<int64_t>(ptr_uint8 - buffer_data) : -1;
}

void SlowIndexOfNumber(const FunctionCallbackInfo<Value>& args) {
Expand All @@ -1297,7 +1297,7 @@ void SlowIndexOfNumber(const FunctionCallbackInfo<Value>& args) {
IndexOfNumberImpl(buffer_obj, needle, offset_i64, end_i64, is_forward));
}

int32_t FastIndexOfNumber(Local<Value>,
int64_t FastIndexOfNumber(Local<Value>,
Local<Value> buffer_obj,
uint32_t needle,
int64_t offset_i64,
Expand Down
27 changes: 27 additions & 0 deletions test/pummel/test-buffer-indexof-large.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
'use strict';

const common = require('../common');
const assert = require('assert');

common.skipIf32Bits();

const match = 2 ** 31 + 100;
let buffer;
try {
buffer = Buffer.allocUnsafe(match + 1);
Comment thread
Dansatch marked this conversation as resolved.
} catch (error) {
if (error.code === 'ERR_MEMORY_ALLOCATION_FAILED' ||
/Array buffer allocation failed/.test(error.message)) {
common.skip('insufficient space for Buffer.allocUnsafe');
}
throw error;
}

buffer[match] = 0x0a;

assert.strictEqual(buffer.indexOf(0x0a, -1), match);
assert.strictEqual(buffer.indexOf(Buffer.from([0x0a]), -1), match);
assert.strictEqual(buffer.indexOf('\n', -1), match);
assert.strictEqual(buffer.lastIndexOf(0x0a, -1), match);
assert.strictEqual(buffer.lastIndexOf(Buffer.from([0x0a]), -1), match);
assert.strictEqual(buffer.lastIndexOf('\n', -1), match);
Loading