diff --git a/native_engine/impl/ark/ark_native_engine.cpp b/native_engine/impl/ark/ark_native_engine.cpp index d2998813bf7e1f31ac5bef9d95651534992457e7..04d8922ef359a84da4af495407c5f25b4bc369d7 100644 --- a/native_engine/impl/ark/ark_native_engine.cpp +++ b/native_engine/impl/ark/ark_native_engine.cpp @@ -2959,26 +2959,26 @@ napi_value ArkNativeEngine::RunBufferScript(std::vector& buffer) // LCOV_EXCL_STOP } -#define EXECUTE_BUFFER(functionName) \ - if (JSNApi::IsBundle(vm_)) { \ - /* FA doesn't enable securemem */ \ - ret = JSNApi::Execute(vm_, buffer, bufferSize, PANDA_MAIN_FUNCTION, desc); \ - } else if (bufferSize != 0) { \ - if (entryPoint == nullptr) { \ - HILOG_DEBUG("Input entryPoint is nullptr, please input entryPoint for merged ESModule"); \ - /* this path for bundle and abc compiled by single module js */ \ - ret = JSNApi::functionName(vm_, buffer, bufferSize, PANDA_MAIN_FUNCTION, desc); \ - } else { \ - /* this path for mergeabc with specific entryPoint */ \ - ret = JSNApi::functionName(vm_, buffer, bufferSize, entryPoint, desc); \ - } \ - } else { \ - /* this path for worker */ \ - ret = JSNApi::Execute(vm_, desc, PANDA_MAIN_FUNCTION); \ +#define EXECUTE_BUFFER(functionName) \ + if (JSNApi::IsBundle(vm_)) { \ + /* FA doesn't enable securemem */ \ + ret = JSNApi::Execute(vm_, buffer, bufferSize, PANDA_MAIN_FUNCTION, desc); \ + } else if (bufferSize != 0) { \ + if (entryPoint == nullptr) { \ + HILOG_DEBUG("Input entryPoint is nullptr, please input entryPoint for merged ESModule"); \ + /* this path for bundle and abc compiled by single module js */ \ + ret = JSNApi::functionName(vm_, buffer, bufferSize, PANDA_MAIN_FUNCTION, desc, false, fileMapper); \ + } else { \ + /* this path for mergeabc with specific entryPoint */ \ + ret = JSNApi::functionName(vm_, buffer, bufferSize, entryPoint, desc, false, fileMapper); \ + } \ + } else { \ + /* this path for worker */ \ + ret = JSNApi::Execute(vm_, desc, PANDA_MAIN_FUNCTION); \ } napi_value ArkNativeEngine::RunActor(uint8_t* buffer, size_t bufferSize, - const char* descriptor, char* entryPoint, bool checkPath) + const char* descriptor, char* entryPoint, bool checkPath, void* fileMapper) { if (buffer == nullptr && descriptor == nullptr) { HILOG_ERROR("invalid param, both buffer and descriptor are nullptr"); diff --git a/native_engine/impl/ark/ark_native_engine.h b/native_engine/impl/ark/ark_native_engine.h index f67b4b787e2dc1c48cf55677aea37c1363a6b544..31c9875af974ce20ae678850bbd08e266d3f2931 100644 --- a/native_engine/impl/ark/ark_native_engine.h +++ b/native_engine/impl/ark/ark_native_engine.h @@ -215,7 +215,7 @@ public: // Run buffer script napi_value RunBufferScript(std::vector& buffer) override; napi_value RunActor(uint8_t* buffer, size_t size, const char* descriptor, - char* entryPoint = nullptr, bool checkPath = false) override; + char* entryPoint = nullptr, bool checkPath = false, void* fileMapper = nullptr) override; // Set lib path NAPI_EXPORT void SetPackagePath(const std::string appLinPathKey, const std::vector& packagePath); napi_value CreateInstance(napi_value constructor, napi_value const* argv, size_t argc) override; diff --git a/native_engine/native_engine.cpp b/native_engine/native_engine.cpp index db6f1f8f18ef902827ddf0d115f691689fb11347..a74f80a7801102bf81aa2526a6370062e33d6daf 100644 --- a/native_engine/native_engine.cpp +++ b/native_engine/native_engine.cpp @@ -594,10 +594,13 @@ OffWorkerFunc NativeEngine::GetOffWorkerFunc() const { return offWorkerFunc_; } + void NativeEngine::SetReleaseWorkerSafeMemFunc(ReleaseWorkerSafeMemFunc func) { releaseWorkerSafeMemFunc_ = func; + panda::JSNApi::SetReleaseSecureMemCallback(const_cast(GetEcmaVm()), func); } + ReleaseWorkerSafeMemFunc NativeEngine::GetReleaseWorkerSafeMemFunc() const { return releaseWorkerSafeMemFunc_; @@ -632,18 +635,6 @@ bool NativeEngine::CallOffWorkerFunc(NativeEngine* engine) return false; } -bool NativeEngine::CallReleaseWorkerSafeMemFunc(void* mapper) -{ - if (mapper == nullptr) { - return true; - } - if (releaseWorkerSafeMemFunc_ != nullptr) { - releaseWorkerSafeMemFunc_(mapper); - return true; - } - return false; -} - // adapt worker to ace container void NativeEngine::SetGetContainerScopeIdFunc(GetContainerScopeIdCallback func) { @@ -1014,10 +1005,7 @@ napi_value NativeEngine::RunScript(const char* path, char* entryPoint) HILOG_ERROR("RunScript: buffer size is empty, please check abc path"); return nullptr; } - napi_value result = RunActor(scriptContent, scriptContentSize, ami.c_str(), entryPoint, false); - if (!CallReleaseWorkerSafeMemFunc(mapper)) { - HILOG_ERROR("RunScript: CallReleaseWorkerSafeMemFunc error"); - } + napi_value result = RunActor(scriptContent, scriptContentSize, ami.c_str(), entryPoint, false, mapper); return result; } @@ -1055,10 +1043,7 @@ napi_value NativeEngine::GetAbcBufferAndRunActor(std::string pathStr, char *entr HILOG_ERROR("GetAbcBufferAndRunActor: GetAbcBuffer error"); return nullptr; } - napi_value result = RunActor(scriptContent, scriptContentSize, workerAmi.c_str(), entryPoint, false); - if (!CallReleaseWorkerSafeMemFunc(mapper)) { - HILOG_ERROR("GetAbcBufferAndRunActor: CallReleaseWorkerSafeMemFunc error"); - } + napi_value result = RunActor(scriptContent, scriptContentSize, workerAmi.c_str(), entryPoint, false, mapper); return result; } diff --git a/native_engine/native_engine.h b/native_engine/native_engine.h index 6f46205967129108b7617dfd9b3c34e0d48551e9..2483d6f472b54ab603b5767d758f5b4c82e3c253 100644 --- a/native_engine/native_engine.h +++ b/native_engine/native_engine.h @@ -111,7 +111,7 @@ using InitWorkerFunc = std::function; using GetAssetFunc = std::function& content, std::string& ami, bool &useSecureMem, void** mapper, bool isRestricted)>; using OffWorkerFunc = std::function; -using ReleaseWorkerSafeMemFunc = std::function; +using ReleaseWorkerSafeMemFunc = std::function; using DebuggerPostTask = std::function&&)>; using NapiUncaughtExceptionCallback = std::function; using PermissionCheckCallback = std::function; @@ -230,7 +230,7 @@ public: virtual bool RunScriptBuffer(const std::string &path, uint8_t* buffer, size_t size, bool isBundle) = 0; virtual napi_value RunBufferScript(std::vector& buffer) = 0; virtual napi_value RunActor(uint8_t* buffer, size_t bufferSize, - const char* descriptor, char* entryPoint = nullptr, bool checkPath = false) = 0; + const char* descriptor, char* entryPoint = nullptr, bool checkPath = false, void* fileMapper = nullptr) = 0; virtual napi_value CreateInstance(napi_value constructor, napi_value const *argv, size_t argc) = 0; @@ -378,7 +378,6 @@ public: virtual bool CallGetAssetFunc(const std::string& uri, uint8_t **buff, size_t *buffSize, std::vector& content, std::string& ami, bool &useSecureMem, void** mapper, bool isRestricted); virtual bool CallOffWorkerFunc(NativeEngine* engine); - virtual bool CallReleaseWorkerSafeMemFunc(void* mapper); // adapt worker to ace container virtual void SetGetContainerScopeIdFunc(GetContainerScopeIdCallback func); diff --git a/test/fuzztest/runactor_fuzzer/runactor_fuzzer.cpp b/test/fuzztest/runactor_fuzzer/runactor_fuzzer.cpp index 41e18cc0d9652825fd013461b243321c81bab94c..f3524ae3af950bf3d19cbca49e5359efbac917f0 100644 --- a/test/fuzztest/runactor_fuzzer/runactor_fuzzer.cpp +++ b/test/fuzztest/runactor_fuzzer/runactor_fuzzer.cpp @@ -36,7 +36,7 @@ public: void RunActor(uint8_t* buffer, size_t bufferSize, const char* descriptor, char* entryPoint) { - arkNativeEngine_->RunActor(buffer, bufferSize, descriptor, entryPoint, true); + arkNativeEngine_->RunActor(buffer, bufferSize, descriptor, entryPoint, true, nullptr); } ~Engine()