| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 83cf979 commit 8b8d18a
2 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -42,6 +42,25 @@ static napi_value New(napi_env env, napi_callback_info info) { | |||
| 42 | 42 | return js_this; | |
| 43 | 43 | } | |
| 44 | 44 | ||
| 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 | + | ||
| 45 | 64 | EXTERN_C_START | |
| 46 | 65 | napi_value Init(napi_env env, napi_value exports) { | |
| 47 | 66 | napi_value myobj_ctor; | |
@@ -50,6 +69,13 @@ napi_value Init(napi_env env, napi_value exports) { | |||
| 50 | 69 | env, "MyObject", NAPI_AUTO_LENGTH, New, NULL, 0, NULL, &myobj_ctor)); | |
| 51 | 70 | NODE_API_CALL(env, | |
| 52 | 71 | 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 | + | ||
| 53 | 79 | return exports; | |
| 54 | 80 | } | |
| 55 | 81 | EXTERN_C_END | |
| Original file line number | Diff line number | Diff 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({}); | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments