Skip to content

Commit c2259c9

Browse files
JckXiatargos
authored andcommitted
src: reset error struct if error code is napi_ok
PR-URL: #40552 Refs: nodejs/node-addon-api#1089 Reviewed-By: Darshan Sen <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Michael Dawson <[email protected]> Reviewed-By: Gabriel Schulhof <[email protected]> Reviewed-By: Juan José Arboleda <[email protected]>
1 parent a8cc8b6 commit c2259c9

File tree

3 files changed

+8
-4
lines changed

3 files changed

+8
-4
lines changed

src/js_native_api_v8.cc

+3-1
Original file line numberDiff line numberDiff line change
@@ -761,12 +761,14 @@ napi_status napi_get_last_error_info(napi_env env,
761761
NAPI_ARRAYSIZE(error_messages) == last_status + 1,
762762
"Count of error messages must match count of error values");
763763
CHECK_LE(env->last_error.error_code, last_status);
764-
765764
// Wait until someone requests the last error information to fetch the error
766765
// message string
767766
env->last_error.error_message =
768767
error_messages[env->last_error.error_code];
769768

769+
if (env->last_error.error_code == napi_ok) {
770+
napi_clear_last_error(env);
771+
}
770772
*result = &(env->last_error);
771773
return napi_ok;
772774
}

src/js_native_api_v8.h

+1
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ static inline napi_status napi_clear_last_error(napi_env env) {
159159
// TODO(boingoing): Should this be a callback?
160160
env->last_error.engine_error_code = 0;
161161
env->last_error.engine_reserved = nullptr;
162+
env->last_error.error_message = nullptr;
162163
return napi_ok;
163164
}
164165

test/js-native-api/common.h

+4-3
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,13 @@
88
const napi_extended_error_info *error_info; \
99
napi_get_last_error_info((env), &error_info); \
1010
bool is_pending; \
11+
const char* err_message = error_info->error_message; \
1112
napi_is_exception_pending((env), &is_pending); \
1213
/* If an exception is already pending, don't rethrow it */ \
1314
if (!is_pending) { \
14-
const char* error_message = error_info->error_message != NULL ? \
15-
error_info->error_message : \
16-
"empty error message"; \
15+
const char* error_message = err_message != NULL ? \
16+
err_message : \
17+
"empty error message"; \
1718
napi_throw_error((env), NULL, error_message); \
1819
} \
1920
} while (0)

0 commit comments

Comments
 (0)