Skip to content

Commit cf6e959

Browse files
use std::basic_string_view to calc length in case of NAPI_AUTO_LENGTH
1 parent 29bf3ab commit cf6e959

File tree

2 files changed

+11
-0
lines changed

2 files changed

+11
-0
lines changed

src/js_native_api_v8.cc

+6
Original file line numberDiff line numberDiff line change
@@ -1469,6 +1469,9 @@ napi_status NAPI_CDECL node_api_create_external_string_latin1(
14691469
return napi_create_string_latin1(env, str, length, result);
14701470
#else
14711471
return v8impl::NewString(env, str, length, result, [&](v8::Isolate* isolate) {
1472+
if (length == NAPI_AUTO_LENGTH) {
1473+
length = (std::string_view(str)).length();
1474+
}
14721475
auto resource = new v8impl::ExternalOneByteStringResource(str, length);
14731476
return v8::String::NewExternalOneByte(isolate, resource);
14741477
});
@@ -1486,6 +1489,9 @@ napi_status NAPI_CDECL node_api_create_external_string_utf16(
14861489
return napi_create_string_utf16(env, str, length, result);
14871490
#else
14881491
return v8impl::NewString(env, str, length, result, [&](v8::Isolate* isolate) {
1492+
if (length == NAPI_AUTO_LENGTH) {
1493+
length = (std::u16string_view(str)).length();
1494+
}
14891495
auto resource = new v8impl::ExternalStringResource(
14901496
reinterpret_cast<const uint16_t*>(str), length);
14911497
return v8::String::NewExternalTwoByte(isolate, resource);

test/js-native-api/test_string/test_string.c

+5
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66
#include "../common.h"
77
#include "test_null.h"
88

9+
enum length_mode {
10+
own_length,
11+
auto_length
12+
};
13+
914
static napi_status validate_and_retrieve_single_string_arg(
1015
napi_env env, napi_callback_info info, napi_value* arg) {
1116
size_t argc = 1;

0 commit comments

Comments
 (0)