Skip to content

Commit

Permalink
fix(ohos): jsvm getInstanceData crash protect
Browse files Browse the repository at this point in the history
  • Loading branch information
etkmao committed Feb 20, 2025
1 parent 2c8a0fa commit 182de61
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 5 deletions.
2 changes: 1 addition & 1 deletion driver/js/include/driver/napi/jsh/jsh_ctx.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ constexpr static int kJSHWeakCallbackWrapperInvalidIndex = 2;
constexpr static int KJSHTurboFunctionGetIndex = 3;
constexpr static int kJSHExternalDataNum = 4;

extern void* GetPointerInInstanceData(JSVM_Env env, int index);
extern void* GetPointerInInstanceData(JSVM_Env env, int index, bool *error = nullptr);

class JSHCtx : public Ctx {
public:
Expand Down
13 changes: 9 additions & 4 deletions driver/js/src/napi/jsh/jsh_ctx.cc
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ using StringViewUtils = footstone::StringViewUtils;
using JSHVM = hippy::vm::JSHVM;
using CallbackInfo = hippy::CallbackInfo;

void* GetPointerInInstanceData(JSVM_Env env, int index) {
void* GetPointerInInstanceData(JSVM_Env env, int index, bool *error) {
if (index < 0 || index >= kJSHExternalDataNum) {
return nullptr;
}
Expand All @@ -53,7 +53,11 @@ void* GetPointerInInstanceData(JSVM_Env env, int index) {
auto status = OH_JSVM_GetInstanceData(env, &data);
FOOTSTONE_DCHECK(status == JSVM_OK);

if (data) {
if (error) {
*error = (status == JSVM_OK) ? false : true;
}

if ((status == JSVM_OK) && data) {
return ((void**)data)[index];
}
return nullptr;
Expand Down Expand Up @@ -1470,8 +1474,9 @@ void JSH_Finalize(JSVM_Env env, void* finalizeData, void* finalizeHint) {
if (!finalizeData) {
return;
}
void* invalid = GetPointerInInstanceData(env, kJSHWeakCallbackWrapperInvalidIndex);
if (invalid) {
bool error = false;
void* invalid = GetPointerInInstanceData(env, kJSHWeakCallbackWrapperInvalidIndex, &error);
if (invalid || error) {
return;
}
auto wrapper = reinterpret_cast<WeakCallbackWrapper*>(finalizeData);
Expand Down

0 comments on commit 182de61

Please sign in to comment.