From a5558db5be69cb195d6f41b1724523d17286707b Mon Sep 17 00:00:00 2001 From: Vladimir Morozov Date: Sat, 8 Oct 2022 13:17:01 -0700 Subject: [PATCH 1/2] node-api,test: fix test_reference_double_free crash --- .../test_reference_double_free.c | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/test/js-native-api/test_reference_double_free/test_reference_double_free.c b/test/js-native-api/test_reference_double_free/test_reference_double_free.c index 8c738aa2f0f5a8..315811813c72f4 100644 --- a/test/js-native-api/test_reference_double_free/test_reference_double_free.c +++ b/test/js-native-api/test_reference_double_free/test_reference_double_free.c @@ -44,21 +44,24 @@ static napi_value New(napi_env env, napi_callback_info info) { static void NoopDeleter(napi_env env, void* data, void* hint) {} -static void DeleteImmediately(napi_env env, napi_callback_info info) { +static napi_value DeleteImmediately(napi_env env, napi_callback_info info) { size_t argc = 1; napi_value js_obj; napi_ref ref; + napi_valuetype type; + napi_value undefined; - NODE_API_CALL_RETURN_VOID(env, - napi_get_cb_info(env, info, &argc, &js_obj, NULL, NULL)); + NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, &js_obj, NULL, NULL)); - napi_valuetype type; - NODE_API_CALL_RETURN_VOID(env, napi_typeof(env, js_obj, &type)); + NODE_API_CALL(env, napi_typeof(env, js_obj, &type)); + NODE_API_ASSERT(env, type == napi_object, "Expected object parameter"); + + NODE_API_CALL(env, napi_wrap(env, js_obj, NULL, NoopDeleter, NULL, &ref)); + NODE_API_CALL(env, napi_delete_reference(env, ref)); + NODE_API_CALL(env, napi_remove_wrap(env, js_obj, NULL)); - NODE_API_CALL_RETURN_VOID(env, - napi_wrap(env, js_obj, NULL, NoopDeleter, NULL, &ref)); - NODE_API_CALL_RETURN_VOID(env, napi_delete_reference(env, ref)); - NODE_API_CALL_RETURN_VOID(env, napi_remove_wrap(env, js_obj, NULL)); + NODE_API_CALL(env, napi_get_undefined(env, &undefined)); + return undefined; } EXTERN_C_START From ba3a1e5b291f84830cf842c64123b5fc0824889b Mon Sep 17 00:00:00 2001 From: Vladimir Morozov Date: Sat, 8 Oct 2022 21:37:30 -0700 Subject: [PATCH 2/2] return NULL instead of undefined --- .../test_reference_double_free/test_reference_double_free.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/test/js-native-api/test_reference_double_free/test_reference_double_free.c b/test/js-native-api/test_reference_double_free/test_reference_double_free.c index 315811813c72f4..32f08c8e66adf1 100644 --- a/test/js-native-api/test_reference_double_free/test_reference_double_free.c +++ b/test/js-native-api/test_reference_double_free/test_reference_double_free.c @@ -49,7 +49,6 @@ static napi_value DeleteImmediately(napi_env env, napi_callback_info info) { napi_value js_obj; napi_ref ref; napi_valuetype type; - napi_value undefined; NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, &js_obj, NULL, NULL)); @@ -60,8 +59,7 @@ static napi_value DeleteImmediately(napi_env env, napi_callback_info info) { NODE_API_CALL(env, napi_delete_reference(env, ref)); NODE_API_CALL(env, napi_remove_wrap(env, js_obj, NULL)); - NODE_API_CALL(env, napi_get_undefined(env, &undefined)); - return undefined; + return NULL; } EXTERN_C_START