From 9ea6558f5e732abed81511c7966c88e8d6d06f24 Mon Sep 17 00:00:00 2001 From: Segev Finer Date: Sat, 17 Aug 2024 08:04:02 +0300 Subject: [PATCH] fix: parsing issue when string is larger than buffer length This is caused by an annoying limitation of Node-API where you can't create a reference to a String. Fixes #199 --- src/parser.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/parser.cc b/src/parser.cc index 966e5cd..daa9e91 100644 --- a/src/parser.cc +++ b/src/parser.cc @@ -56,7 +56,7 @@ class CallbackInput final { *bytes_read = 0; String result; if (!reader->partial_string.IsEmpty()) { - result = reader->partial_string.Value().As(); + result = reader->partial_string.Get("value").As(); } else { Function callback = reader->callback.Value(); Napi::Value result_value = callback({ @@ -92,7 +92,10 @@ class CallbackInput final { reader->byte_offset += *bytes_read; if (utf16_units_read < length) { - reader->partial_string.Reset(slice(result, utf16_units_read)); + if (reader->partial_string.IsEmpty()) { + reader->partial_string = Napi::Persistent(Object::New(env)); + } + reader->partial_string.Set("value", slice(result, utf16_units_read)); } else { reader->partial_string.Reset(); } @@ -103,7 +106,7 @@ class CallbackInput final { FunctionReference callback; std::vector buffer; size_t byte_offset {}; - Reference partial_string; + ObjectReference partial_string; }; void Parser::Init(Napi::Env env, Napi::Object exports) {