diff --git a/frameworks/bridge/declarative_frontend/engine/jsi/jsi_declarative_engine.cpp b/frameworks/bridge/declarative_frontend/engine/jsi/jsi_declarative_engine.cpp index e4ac956e3779ff1422f6694b52a42d2651e7e167..361e88abe4fb455db398a2430a019b78d5180dea 100644 --- a/frameworks/bridge/declarative_frontend/engine/jsi/jsi_declarative_engine.cpp +++ b/frameworks/bridge/declarative_frontend/engine/jsi/jsi_declarative_engine.cpp @@ -1717,6 +1717,11 @@ bool JsiDeclarativeEngine::ExecuteCardAbc(const std::string& fileName, int64_t c #else abcPath = moduleName.append("/").append(fileName); #endif + { + if (arkRuntime->IsStaticOrInvalidFile(content.data(), content.size())) { + return false; + } + } { if (!arkRuntime->ExecuteModuleBuffer(content.data(), content.size(), abcPath, true)) { return false; diff --git a/frameworks/bridge/js_frontend/engine/jsi/ark_js_runtime.cpp b/frameworks/bridge/js_frontend/engine/jsi/ark_js_runtime.cpp index 599520a756179b414ceda850d1fbf39fc349d387..cb44cd7c41165fe14bed551c38c7201da9135b21 100644 --- a/frameworks/bridge/js_frontend/engine/jsi/ark_js_runtime.cpp +++ b/frameworks/bridge/js_frontend/engine/jsi/ark_js_runtime.cpp @@ -206,6 +206,35 @@ bool ArkJSRuntime::IsExecuteModuleInAbcFile( return ret; } +bool ArkJSRuntime::IsStaticOrInvalidFile(const uint8_t *data, int32_t size) +{ + JSExecutionScope executionScope(vm_); + LocalScope scope(vm_); + panda::TryCatch trycatch(vm_); + JSNApi::PandaFileType fileType = JSNApi::GetFileType(data, size); + bool ret; + switch (fileType) { + case JSNApi::PandaFileType::FILE_DYNAMIC: + ret = false; + LOGI("ArkJSRuntime::IsStaticOrInvalidFile, file is dynamic"); + break; + case JSNApi::PandaFileType::FILE_STATIC: + ret = true; + LOGI("ArkJSRuntime::IsStaticOrInvalidFile, file is static"); + break; + case JSNApi::PandaFileType::FILE_FORMAT_INVALID: + ret = true; + LOGE("ArkJSRuntime::IsStaticOrInvalidFile, file is invalid. reason is param invalid"); + break; + default: + ret = true; + LOGE("ArkJSRuntime::IsStaticOrInvalidFile, file is invalid"); + } + + HandleUncaughtException(trycatch); + return ret; +} + bool ArkJSRuntime::ExecuteModuleBuffer(const uint8_t* data, int32_t size, const std::string& filename, bool needUpdate) { JSExecutionScope executionScope(vm_); diff --git a/frameworks/bridge/js_frontend/engine/jsi/ark_js_runtime.h b/frameworks/bridge/js_frontend/engine/jsi/ark_js_runtime.h index bc798d2b952f3c810fb5a24cbf56e3d4eed5db8e..67dc759861ab6fd2d7f853c539bd11e556ca39b0 100644 --- a/frameworks/bridge/js_frontend/engine/jsi/ark_js_runtime.h +++ b/frameworks/bridge/js_frontend/engine/jsi/ark_js_runtime.h @@ -105,6 +105,7 @@ public: void DestroyHeapProfiler() override; bool IsExecuteModuleInAbcFile( const std::string &bundleName, const std::string &moduleName, const std::string &ohmurl); + bool IsStaticOrInvalidFile(const uint8_t *data, int32_t size); bool ExecuteModuleBuffer(const uint8_t *data, int32_t size, const std::string &filename, bool needUpdate = false); int32_t LoadDestinationFile(const std::string& bundleName, const std::string& moduleName,