Skip to content

Commit a406a32

Browse files
Sampson Gaomhdawson
Sampson Gao
authored andcommitted
n-api: fix warning about size_t compare with int
PR-URL: #15508 Reviewed-By: Michael Dawson <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Franziska Hinkelmann <[email protected]> Reviewed-By: Anna Henningsen <[email protected]>
1 parent 3f071fa commit a406a32

File tree

13 files changed

+85
-50
lines changed

13 files changed

+85
-50
lines changed

src/node_api.cc

+27-16
Original file line numberDiff line numberDiff line change
@@ -117,16 +117,23 @@ struct napi_env__ {
117117
CHECK_TO_TYPE((env), Boolean, (context), (result), (src), \
118118
napi_boolean_expected)
119119

120+
// n-api defines NAPI_AUTO_LENGHTH as the indicator that a string
121+
// is null terminated. For V8 the equivalent is -1. The assert
122+
// validates that our cast of NAPI_AUTO_LENGTH results in -1 as
123+
// needed by V8.
120124
#define CHECK_NEW_FROM_UTF8_LEN(env, result, str, len) \
121125
do { \
126+
static_assert(static_cast<int>(NAPI_AUTO_LENGTH) == -1, \
127+
"Casting NAPI_AUTO_LENGTH to int must result in -1"); \
122128
auto str_maybe = v8::String::NewFromUtf8( \
123-
(env)->isolate, (str), v8::NewStringType::kInternalized, (len)); \
129+
(env)->isolate, (str), v8::NewStringType::kInternalized, \
130+
static_cast<int>(len)); \
124131
CHECK_MAYBE_EMPTY((env), str_maybe, napi_generic_failure); \
125132
(result) = str_maybe.ToLocalChecked(); \
126133
} while (0)
127134

128135
#define CHECK_NEW_FROM_UTF8(env, result, str) \
129-
CHECK_NEW_FROM_UTF8_LEN((env), (result), (str), -1)
136+
CHECK_NEW_FROM_UTF8_LEN((env), (result), (str), NAPI_AUTO_LENGTH)
130137

131138
#define GET_RETURN_STATUS(env) \
132139
(!try_catch.HasCaught() ? napi_ok \
@@ -918,21 +925,26 @@ NAPI_NO_RETURN void napi_fatal_error(const char* location,
918925
size_t location_len,
919926
const char* message,
920927
size_t message_len) {
921-
char* location_string = const_cast<char*>(location);
922-
char* message_string = const_cast<char*>(message);
923-
if (location_len != -1) {
924-
location_string = reinterpret_cast<char*>(
925-
malloc(location_len * sizeof(char) + 1));
926-
strncpy(location_string, location, location_len);
927-
location_string[location_len] = '\0';
928+
std::string location_string;
929+
std::string message_string;
930+
931+
if (location_len != NAPI_AUTO_LENGTH) {
932+
location_string.assign(
933+
const_cast<char*>(location), location_len);
934+
} else {
935+
location_string.assign(
936+
const_cast<char*>(location), strlen(location));
928937
}
929-
if (message_len != -1) {
930-
message_string = reinterpret_cast<char*>(
931-
malloc(message_len * sizeof(char) + 1));
932-
strncpy(message_string, message, message_len);
933-
message_string[message_len] = '\0';
938+
939+
if (message_len != NAPI_AUTO_LENGTH) {
940+
message_string.assign(
941+
const_cast<char*>(message), message_len);
942+
} else {
943+
message_string.assign(
944+
const_cast<char*>(message), strlen(message));
934945
}
935-
node::FatalError(location_string, message_string);
946+
947+
node::FatalError(location_string.c_str(), message_string.c_str());
936948
}
937949

938950
napi_status napi_create_function(napi_env env,
@@ -3285,7 +3297,6 @@ napi_status napi_adjust_external_memory(napi_env env,
32853297
int64_t change_in_bytes,
32863298
int64_t* adjusted_value) {
32873299
CHECK_ENV(env);
3288-
CHECK_ARG(env, &change_in_bytes);
32893300
CHECK_ARG(env, adjusted_value);
32903301

32913302
*adjusted_value = env->isolate->AdjustAmountOfExternalAllocatedMemory(

src/node_api.h

+2
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ typedef struct {
100100
#define NAPI_MODULE(modname, regfunc) \
101101
NAPI_MODULE_X(modname, regfunc, NULL, 0)
102102

103+
#define NAPI_AUTO_LENGTH SIZE_MAX
104+
103105
EXTERN_C_START
104106

105107
NAPI_EXTERN void napi_module_register(napi_module* mod);

test/addons-napi/test_async/test_async.cc

+4-4
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,8 @@ napi_value Test(napi_env env, napi_callback_info info) {
9595
NAPI_CALL(env,
9696
napi_create_reference(env, argv[2], 1, &the_carrier._callback));
9797

98-
NAPI_CALL(env,
99-
napi_create_string_utf8(env, "TestResource", -1, &resource_name));
98+
NAPI_CALL(env, napi_create_string_utf8(
99+
env, "TestResource", NAPI_AUTO_LENGTH, &resource_name));
100100
NAPI_CALL(env, napi_create_async_work(env, argv[1], resource_name,
101101
Execute, Complete, &the_carrier, &the_carrier._request));
102102
NAPI_CALL(env,
@@ -145,8 +145,8 @@ napi_value TestCancel(napi_env env, napi_callback_info info) {
145145
napi_value resource_name;
146146
void* data;
147147

148-
NAPI_CALL(env,
149-
napi_create_string_utf8(env, "TestResource", -1, &resource_name));
148+
NAPI_CALL(env, napi_create_string_utf8(
149+
env, "TestResource", NAPI_AUTO_LENGTH, &resource_name));
150150

151151
// make sure the work we are going to cancel will not be
152152
// able to start by using all the threads in the pool

test/addons-napi/test_constructor/test_constructor.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ napi_value Init(napi_env env, napi_value exports) {
7777
};
7878

7979
napi_value cons;
80-
NAPI_CALL(env, napi_define_class(env, "MyObject", -1, New,
80+
NAPI_CALL(env, napi_define_class(env, "MyObject", NAPI_AUTO_LENGTH, New,
8181
NULL, sizeof(properties)/sizeof(*properties), properties, &cons));
8282

8383
NAPI_CALL(env, napi_create_reference(env, cons, 1, &constructor_));

test/addons-napi/test_conversions/test_conversions.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ napi_value AsString(napi_env env, napi_callback_info info) {
8181
napi_get_value_string_utf8(env, args[0], value, sizeof(value), NULL));
8282

8383
napi_value output;
84-
NAPI_CALL(env, napi_create_string_utf8(env, value, -1, &output));
84+
NAPI_CALL(env, napi_create_string_utf8(
85+
env, value, NAPI_AUTO_LENGTH, &output));
8586

8687
return output;
8788
}

test/addons-napi/test_env_sharing/compare_env.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ napi_value compare(napi_env env, napi_callback_info info) {
1515
}
1616

1717
napi_value Init(napi_env env, napi_value exports) {
18-
NAPI_CALL(env, napi_create_function(env, "exports", -1, compare, NULL, &exports));
18+
NAPI_CALL(env, napi_create_function(
19+
env, "exports", NAPI_AUTO_LENGTH, compare, NULL, &exports));
1920
return exports;
2021
}
2122

test/addons-napi/test_error/test_error.cc

+18-10
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ napi_value checkError(napi_env env, napi_callback_info info) {
1818
napi_value throwExistingError(napi_env env, napi_callback_info info) {
1919
napi_value message;
2020
napi_value error;
21-
NAPI_CALL(env, napi_create_string_utf8(env, "existing error", -1, &message));
21+
NAPI_CALL(env, napi_create_string_utf8(
22+
env, "existing error", NAPI_AUTO_LENGTH, &message));
2223
NAPI_CALL(env, napi_create_error(env, nullptr, message, &error));
2324
NAPI_CALL(env, napi_throw(env, error));
2425
return nullptr;
@@ -62,23 +63,26 @@ napi_value throwTypeErrorCode(napi_env env, napi_callback_info info) {
6263
napi_value createError(napi_env env, napi_callback_info info) {
6364
napi_value result;
6465
napi_value message;
65-
NAPI_CALL(env, napi_create_string_utf8(env, "error", -1, &message));
66+
NAPI_CALL(env, napi_create_string_utf8(
67+
env, "error", NAPI_AUTO_LENGTH, &message));
6668
NAPI_CALL(env, napi_create_error(env, nullptr, message, &result));
6769
return result;
6870
}
6971

7072
napi_value createRangeError(napi_env env, napi_callback_info info) {
7173
napi_value result;
7274
napi_value message;
73-
NAPI_CALL(env, napi_create_string_utf8(env, "range error", -1, &message));
75+
NAPI_CALL(env, napi_create_string_utf8(
76+
env, "range error", NAPI_AUTO_LENGTH, &message));
7477
NAPI_CALL(env, napi_create_range_error(env, nullptr, message, &result));
7578
return result;
7679
}
7780

7881
napi_value createTypeError(napi_env env, napi_callback_info info) {
7982
napi_value result;
8083
napi_value message;
81-
NAPI_CALL(env, napi_create_string_utf8(env, "type error", -1, &message));
84+
NAPI_CALL(env, napi_create_string_utf8(
85+
env, "type error", NAPI_AUTO_LENGTH, &message));
8286
NAPI_CALL(env, napi_create_type_error(env, nullptr, message, &result));
8387
return result;
8488
}
@@ -87,8 +91,10 @@ napi_value createErrorCode(napi_env env, napi_callback_info info) {
8791
napi_value result;
8892
napi_value message;
8993
napi_value code;
90-
NAPI_CALL(env, napi_create_string_utf8(env, "Error [error]", -1, &message));
91-
NAPI_CALL(env, napi_create_string_utf8(env, "ERR_TEST_CODE", -1, &code));
94+
NAPI_CALL(env, napi_create_string_utf8(
95+
env, "Error [error]", NAPI_AUTO_LENGTH, &message));
96+
NAPI_CALL(env, napi_create_string_utf8(
97+
env, "ERR_TEST_CODE", NAPI_AUTO_LENGTH, &code));
9298
NAPI_CALL(env, napi_create_error(env, code, message, &result));
9399
return result;
94100
}
@@ -99,9 +105,10 @@ napi_value createRangeErrorCode(napi_env env, napi_callback_info info) {
99105
napi_value code;
100106
NAPI_CALL(env, napi_create_string_utf8(env,
101107
"RangeError [range error]",
102-
-1,
108+
NAPI_AUTO_LENGTH,
103109
&message));
104-
NAPI_CALL(env, napi_create_string_utf8(env, "ERR_TEST_CODE", -1, &code));
110+
NAPI_CALL(env, napi_create_string_utf8(
111+
env, "ERR_TEST_CODE", NAPI_AUTO_LENGTH, &code));
105112
NAPI_CALL(env, napi_create_range_error(env, code, message, &result));
106113
return result;
107114
}
@@ -112,9 +119,10 @@ napi_value createTypeErrorCode(napi_env env, napi_callback_info info) {
112119
napi_value code;
113120
NAPI_CALL(env, napi_create_string_utf8(env,
114121
"TypeError [type error]",
115-
-1,
122+
NAPI_AUTO_LENGTH,
116123
&message));
117-
NAPI_CALL(env, napi_create_string_utf8(env, "ERR_TEST_CODE", -1, &code));
124+
NAPI_CALL(env, napi_create_string_utf8(
125+
env, "ERR_TEST_CODE", NAPI_AUTO_LENGTH, &code));
118126
NAPI_CALL(env, napi_create_type_error(env, code, message, &result));
119127
return result;
120128
}

test/addons-napi/test_fatal/test_fatal.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
#include "../common.h"
33

44
napi_value Test(napi_env env, napi_callback_info info) {
5-
napi_fatal_error("test_fatal::Test", -1, "fatal message", -1);
5+
napi_fatal_error("test_fatal::Test", NAPI_AUTO_LENGTH,
6+
"fatal message", NAPI_AUTO_LENGTH);
67
return NULL;
78
}
89

test/addons-napi/test_function/test_function.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@ napi_value TestFunctionName(napi_env env, napi_callback_info info) {
3333
napi_value Init(napi_env env, napi_value exports) {
3434
napi_value fn1;
3535
NAPI_CALL(env, napi_create_function(
36-
env, NULL, -1, TestCallFunction, NULL, &fn1));
36+
env, NULL, NAPI_AUTO_LENGTH, TestCallFunction, NULL, &fn1));
3737

3838
napi_value fn2;
3939
NAPI_CALL(env, napi_create_function(
40-
env, "Name", -1, TestFunctionName, NULL, &fn2));
40+
env, "Name", NAPI_AUTO_LENGTH, TestFunctionName, NULL, &fn2));
4141

4242
napi_value fn3;
4343
NAPI_CALL(env, napi_create_function(

test/addons-napi/test_general/test_general.c

+17-9
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ napi_value testGetNodeVersion(napi_env env, napi_callback_info info) {
4343
NAPI_CALL(env, napi_create_uint32(env, node_version->patch, &patch));
4444
NAPI_CALL(env, napi_create_string_utf8(env,
4545
node_version->release,
46-
(size_t)-1,
46+
NAPI_AUTO_LENGTH,
4747
&release));
4848
NAPI_CALL(env, napi_create_array_with_length(env, 4, &result));
4949
NAPI_CALL(env, napi_set_element(env, result, 0, major));
@@ -120,21 +120,29 @@ napi_value testNapiTypeof(napi_env env, napi_callback_info info) {
120120

121121
napi_value result = NULL;
122122
if (argument_type == napi_number) {
123-
NAPI_CALL(env, napi_create_string_utf8(env, "number", -1, &result));
123+
NAPI_CALL(env, napi_create_string_utf8(
124+
env, "number", NAPI_AUTO_LENGTH, &result));
124125
} else if (argument_type == napi_string) {
125-
NAPI_CALL(env, napi_create_string_utf8(env, "string", -1, &result));
126+
NAPI_CALL(env, napi_create_string_utf8(
127+
env, "string", NAPI_AUTO_LENGTH, &result));
126128
} else if (argument_type == napi_function) {
127-
NAPI_CALL(env, napi_create_string_utf8(env, "function", -1, &result));
129+
NAPI_CALL(env, napi_create_string_utf8(
130+
env, "function", NAPI_AUTO_LENGTH, &result));
128131
} else if (argument_type == napi_object) {
129-
NAPI_CALL(env, napi_create_string_utf8(env, "object", -1, &result));
132+
NAPI_CALL(env, napi_create_string_utf8(
133+
env, "object", NAPI_AUTO_LENGTH, &result));
130134
} else if (argument_type == napi_boolean) {
131-
NAPI_CALL(env, napi_create_string_utf8(env, "boolean", -1, &result));
135+
NAPI_CALL(env, napi_create_string_utf8(
136+
env, "boolean", NAPI_AUTO_LENGTH, &result));
132137
} else if (argument_type == napi_undefined) {
133-
NAPI_CALL(env, napi_create_string_utf8(env, "undefined", -1, &result));
138+
NAPI_CALL(env, napi_create_string_utf8(
139+
env, "undefined", NAPI_AUTO_LENGTH, &result));
134140
} else if (argument_type == napi_symbol) {
135-
NAPI_CALL(env, napi_create_string_utf8(env, "symbol", -1, &result));
141+
NAPI_CALL(env, napi_create_string_utf8(
142+
env, "symbol", NAPI_AUTO_LENGTH, &result));
136143
} else if (argument_type == napi_null) {
137-
NAPI_CALL(env, napi_create_string_utf8(env, "null", -1, &result));
144+
NAPI_CALL(env, napi_create_string_utf8(
145+
env, "null", NAPI_AUTO_LENGTH, &result));
138146
}
139147
return result;
140148
}

test/addons-napi/test_make_callback/binding.cc

+4-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ napi_value MakeCallback(napi_env env, napi_callback_info info) {
2525
NAPI_CALL(env, napi_typeof(env, func, &func_type));
2626

2727
napi_value resource_name;
28-
NAPI_CALL(env, napi_create_string_utf8(env, "test", -1, &resource_name));
28+
NAPI_CALL(env, napi_create_string_utf8(
29+
env, "test", NAPI_AUTO_LENGTH, &resource_name));
2930

3031
napi_async_context context;
3132
NAPI_CALL(env, napi_async_init(env, func, resource_name, &context));
@@ -45,7 +46,8 @@ napi_value MakeCallback(napi_env env, napi_callback_info info) {
4546

4647
napi_value Init(napi_env env, napi_value exports) {
4748
napi_value fn;
48-
NAPI_CALL(env, napi_create_function(env, NULL, -1, MakeCallback, NULL, &fn));
49+
NAPI_CALL(env, napi_create_function(
50+
env, NULL, NAPI_AUTO_LENGTH, MakeCallback, NULL, &fn));
4951
NAPI_CALL(env, napi_set_named_property(env, exports, "makeCallback", fn));
5052
return exports;
5153
}

test/addons-napi/test_make_callback_recurse/binding.cc

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ napi_value MakeCallback(napi_env env, napi_callback_info info) {
2020

2121
napi_value Init(napi_env env, napi_value exports) {
2222
napi_value fn;
23-
NAPI_CALL(env, napi_create_function(env, NULL, -1, MakeCallback, NULL, &fn));
23+
NAPI_CALL(env, napi_create_function(
24+
env, NULL, NAPI_AUTO_LENGTH, MakeCallback, NULL, &fn));
2425
NAPI_CALL(env, napi_set_named_property(env, exports, "makeCallback", fn));
2526
return exports;
2627
}

test/addons-napi/test_properties/test_properties.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,14 @@ napi_value Init(napi_env env, napi_value exports) {
6666
napi_value name_value;
6767
NAPI_CALL(env, napi_create_string_utf8(env,
6868
"NameKeyValue",
69-
-1,
69+
NAPI_AUTO_LENGTH,
7070
&name_value));
7171

7272
napi_value symbol_description;
7373
napi_value name_symbol;
7474
NAPI_CALL(env, napi_create_string_utf8(env,
7575
"NameKeySymbol",
76-
-1,
76+
NAPI_AUTO_LENGTH,
7777
&symbol_description));
7878
NAPI_CALL(env, napi_create_symbol(env,
7979
symbol_description,

0 commit comments

Comments
 (0)