Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 3474cd8

Browse filesBrowse files
legendecasRafaelGSS
authored andcommitted
test: verify napi_remove_wrap with napi_delete_reference
Verify that napi_remove_wrap and napi_delete_reference should be safe to be called consecutively on the in-out params of napi_wrap. PR-URL: #44754 Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com> Reviewed-By: Michael Dawson <midawson@redhat.com> Reviewed-By: Minwoo Jung <nodecorelab@gmail.com>
1 parent ce085d7 commit 3474cd8
Copy full SHA for 3474cd8

File tree

Expand file treeCollapse file tree

2 files changed

+36
-0
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

2 files changed

+36
-0
lines changed
Open diff view settings
Collapse file

‎test/js-native-api/test_reference_double_free/test_reference_double_free.c‎

Copy file name to clipboardExpand all lines: test/js-native-api/test_reference_double_free/test_reference_double_free.c
+26Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,25 @@ static napi_value New(napi_env env, napi_callback_info info) {
4242
return js_this;
4343
}
4444

45+
static void NoopDeleter(napi_env env, void* data, void* hint) {}
46+
47+
static void DeleteImmediately(napi_env env, napi_callback_info info) {
48+
size_t argc = 1;
49+
napi_value js_obj;
50+
napi_ref ref;
51+
52+
NODE_API_CALL_RETURN_VOID(env,
53+
napi_get_cb_info(env, info, &argc, &js_obj, NULL, NULL));
54+
55+
napi_valuetype type;
56+
NODE_API_CALL_RETURN_VOID(env, napi_typeof(env, js_obj, &type));
57+
58+
NODE_API_CALL_RETURN_VOID(env,
59+
napi_wrap(env, js_obj, NULL, NoopDeleter, NULL, &ref));
60+
NODE_API_CALL_RETURN_VOID(env, napi_delete_reference(env, ref));
61+
NODE_API_CALL_RETURN_VOID(env, napi_remove_wrap(env, js_obj, NULL));
62+
}
63+
4564
EXTERN_C_START
4665
napi_value Init(napi_env env, napi_value exports) {
4766
napi_value myobj_ctor;
@@ -50,6 +69,13 @@ napi_value Init(napi_env env, napi_value exports) {
5069
env, "MyObject", NAPI_AUTO_LENGTH, New, NULL, 0, NULL, &myobj_ctor));
5170
NODE_API_CALL(env,
5271
napi_set_named_property(env, exports, "MyObject", myobj_ctor));
72+
73+
napi_property_descriptor descriptors[] = {
74+
DECLARE_NODE_API_PROPERTY("deleteImmediately", DeleteImmediately),
75+
};
76+
NODE_API_CALL(env, napi_define_properties(
77+
env, exports, sizeof(descriptors) / sizeof(*descriptors), descriptors));
78+
5379
return exports;
5480
}
5581
EXTERN_C_END
Collapse file
+10Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
'use strict';
2+
3+
// This test makes no assertions. It tests that calling napi_remove_wrap and
4+
// napi_delete_reference consecutively doesn't crash the process.
5+
6+
const { buildType } = require('../../common');
7+
8+
const addon = require(`./build/${buildType}/test_reference_double_free`);
9+
10+
addon.deleteImmediately({});

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.