From a95b66f349244aefecc21a96d55418a63e2bf884 Mon Sep 17 00:00:00 2001 From: Mert Can Altin Date: Sun, 15 Mar 2026 23:06:25 +0300 Subject: [PATCH] src: use stack allocation in indexOf latin1 path --- benchmark/buffers/buffer-indexof.js | 2 +- src/node_buffer.cc | 10 +++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/benchmark/buffers/buffer-indexof.js b/benchmark/buffers/buffer-indexof.js index 52cc95ccb9cf7e..be6cc243a975da 100644 --- a/benchmark/buffers/buffer-indexof.js +++ b/benchmark/buffers/buffer-indexof.js @@ -19,7 +19,7 @@ const searchStrings = [ const bench = common.createBenchmark(main, { search: searchStrings, - encoding: ['undefined', 'utf8', 'ucs2'], + encoding: ['undefined', 'utf8', 'ucs2', 'latin1'], type: ['buffer', 'string'], n: [5e4], }, { diff --git a/src/node_buffer.cc b/src/node_buffer.cc index e40a21288ee79d..acf4aff37c5a9c 100644 --- a/src/node_buffer.cc +++ b/src/node_buffer.cc @@ -1051,23 +1051,19 @@ void IndexOfString(const FunctionCallbackInfo& args) { offset, is_forward); } else if (enc == LATIN1) { - uint8_t* needle_data = node::UncheckedMalloc(needle_length); - if (needle_data == nullptr) { - return args.GetReturnValue().Set(-1); - } + MaybeStackBuffer needle_data(needle_length); StringBytes::Write(isolate, - reinterpret_cast(needle_data), + reinterpret_cast(needle_data.out()), needle_length, needle, enc); result = nbytes::SearchString(reinterpret_cast(haystack), haystack_length, - needle_data, + needle_data.out(), needle_length, offset, is_forward); - free(needle_data); } args.GetReturnValue().Set(