From 55c3e660ea51fc8553a47eb0437cee45a78f2554 Mon Sep 17 00:00:00 2001 From: Rayllll Date: Thu, 5 Dec 2024 10:47:08 +0800 Subject: [PATCH 1/2] Signed-off-by: Rayllll fix nullptr problem --- services/include/package/pkg_manager.h | 4 ++-- services/package/pkg_manager/pkg_managerImpl.cpp | 8 +++++++- services/package/pkg_manager/pkg_manager_impl.h | 4 ++-- test/unittest/script/script_unittest.h | 2 +- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/services/include/package/pkg_manager.h b/services/include/package/pkg_manager.h index f4219215..b38b7b64 100644 --- a/services/include/package/pkg_manager.h +++ b/services/include/package/pkg_manager.h @@ -371,10 +371,10 @@ public: std::vector &fileIds) = 0; virtual int32_t LoadPackageWithStream(const std::string &packagePath, const std::string &keyPath, - std::vector &fileIds, uint8_t type, StreamPtr stream) = 0; + std::vector &fileIds, uint8_t type, StreamPtr &stream) = 0; virtual int32_t LoadPackageWithStreamForApp(AppPkgInfo &info, - std::vector &fileIds, StreamPtr stream) = 0; + std::vector &fileIds, StreamPtr &stream) = 0; virtual int32_t ParsePackage(StreamPtr stream, std::vector &fileIds, int32_t type) = 0; diff --git a/services/package/pkg_manager/pkg_managerImpl.cpp b/services/package/pkg_manager/pkg_managerImpl.cpp index b7004c96..e6d1c361 100644 --- a/services/package/pkg_manager/pkg_managerImpl.cpp +++ b/services/package/pkg_manager/pkg_managerImpl.cpp @@ -393,7 +393,7 @@ int32_t PkgManagerImpl::LoadPackage(const std::string &packagePath, std::vector< } int32_t PkgManagerImpl::LoadPackageWithStreamForApp(AppPkgInfo &info, - std::vector &fileIds, StreamPtr stream) + std::vector &fileIds, StreamPtr &stream) { int32_t ret = SetSignVerifyKeyName(info.keyPath); if (ret != PKG_SUCCESS) { @@ -404,6 +404,8 @@ int32_t PkgManagerImpl::LoadPackageWithStreamForApp(AppPkgInfo &info, PkgFilePtr pkgFile = CreatePackage(stream, static_cast(info.type), nullptr); if (pkgFile == nullptr) { PKG_LOGE("Create package fail %s", info.packagePath.c_str()); + ClosePkgStream(stream); + stream = nullptr; UPDATER_LAST_WORD(ret); return PKG_INVALID_PARAM; } @@ -412,6 +414,7 @@ int32_t PkgManagerImpl::LoadPackageWithStreamForApp(AppPkgInfo &info, PKG_LOGE("Read img hash data fail %s", info.pkgType.c_str()); delete pkgFile; pkgFile = nullptr; + stream = nullptr; UPDATER_LAST_WORD(ret); return ret; } @@ -423,6 +426,7 @@ int32_t PkgManagerImpl::LoadPackageWithStreamForApp(AppPkgInfo &info, PKG_LOGE("Load package fail %s", info.packagePath.c_str()); delete pkgFile; pkgFile = nullptr; + stream = nullptr; UPDATER_LAST_WORD(ret); return ret; } @@ -451,6 +455,7 @@ int32_t PkgManagerImpl::LoadPackageWithStream(const std::string &packagePath, if (pkgFile == nullptr) { PKG_LOGE("Create package fail %s", packagePath.c_str()); ClosePkgStream(stream); + stream = nullptr; UPDATER_LAST_WORD(ret); return PKG_INVALID_PARAM; } @@ -462,6 +467,7 @@ int32_t PkgManagerImpl::LoadPackageWithStream(const std::string &packagePath, if (ret != PKG_SUCCESS) { PKG_LOGE("Load package fail %s", packagePath.c_str()); delete pkgFile; + stream = nullptr; UPDATER_LAST_WORD(ret); return ret; } diff --git a/services/package/pkg_manager/pkg_manager_impl.h b/services/package/pkg_manager/pkg_manager_impl.h index ba6a6604..46a92572 100644 --- a/services/package/pkg_manager/pkg_manager_impl.h +++ b/services/package/pkg_manager/pkg_manager_impl.h @@ -64,10 +64,10 @@ public: int32_t LoadPackageWithoutUnPack(const std::string &packagePath, std::vector &fileIds) override; int32_t LoadPackageWithStream(const std::string &packagePath, const std::string &keyPath, - std::vector &fileIds, uint8_t type, StreamPtr stream) override; + std::vector &fileIds, uint8_t type, StreamPtr &stream) override; int32_t LoadPackageWithStreamForApp(AppPkgInfo &info, - std::vector &fileIds, StreamPtr stream) override; + std::vector &fileIds, StreamPtr &stream) override; int32_t ParsePackage(StreamPtr stream, std::vector &fileIds, int32_t type) override; diff --git a/test/unittest/script/script_unittest.h b/test/unittest/script/script_unittest.h index 6e58c662..759418ad 100644 --- a/test/unittest/script/script_unittest.h +++ b/test/unittest/script/script_unittest.h @@ -138,7 +138,7 @@ public: return PKG_SUCCESS; } int32_t LoadPackageWithStreamForApp(AppPkgInfo &info, - std::vector &fileIds, StreamPtr stream) override + std::vector &fileIds, StreamPtr &stream) override { return PKG_SUCCESS; } -- Gitee From d3b73b00e7f72b6658417985a5b7d9990db13395 Mon Sep 17 00:00:00 2001 From: Rayllll Date: Thu, 5 Dec 2024 10:47:08 +0800 Subject: [PATCH 2/2] Signed-off-by: Rayllll fix nullptr problem Signed-off-by: Rayllll --- services/flow_update/update_bin/bin_process.cpp | 4 +++- services/include/package/pkg_manager.h | 4 ++-- services/package/pkg_manager/pkg_managerImpl.cpp | 13 ++++++++++--- services/package/pkg_manager/pkg_manager_impl.h | 6 +++--- test/unittest/script/script_unittest.h | 2 +- 5 files changed, 19 insertions(+), 10 deletions(-) diff --git a/services/flow_update/update_bin/bin_process.cpp b/services/flow_update/update_bin/bin_process.cpp index 4aa1330c..a2f2a10c 100644 --- a/services/flow_update/update_bin/bin_process.cpp +++ b/services/flow_update/update_bin/bin_process.cpp @@ -208,7 +208,9 @@ int32_t UScriptInstructionBinFlowWrite::ProcessBinFile(Uscript::UScriptEnv &env, } ON_SCOPE_EXIT(failExecute) { isStopRun_ = true; - stream->Stop(); + if (stream != nullptr) { + stream->Stop(); + } }; std::string pkgFileName; int32_t ret = context.GetParam(0, pkgFileName); diff --git a/services/include/package/pkg_manager.h b/services/include/package/pkg_manager.h index f4219215..b38b7b64 100644 --- a/services/include/package/pkg_manager.h +++ b/services/include/package/pkg_manager.h @@ -371,10 +371,10 @@ public: std::vector &fileIds) = 0; virtual int32_t LoadPackageWithStream(const std::string &packagePath, const std::string &keyPath, - std::vector &fileIds, uint8_t type, StreamPtr stream) = 0; + std::vector &fileIds, uint8_t type, StreamPtr &stream) = 0; virtual int32_t LoadPackageWithStreamForApp(AppPkgInfo &info, - std::vector &fileIds, StreamPtr stream) = 0; + std::vector &fileIds, StreamPtr &stream) = 0; virtual int32_t ParsePackage(StreamPtr stream, std::vector &fileIds, int32_t type) = 0; diff --git a/services/package/pkg_manager/pkg_managerImpl.cpp b/services/package/pkg_manager/pkg_managerImpl.cpp index b7004c96..7f7a0a11 100644 --- a/services/package/pkg_manager/pkg_managerImpl.cpp +++ b/services/package/pkg_manager/pkg_managerImpl.cpp @@ -374,6 +374,7 @@ int32_t PkgManagerImpl::ExtraAndLoadPackage(const std::string &path, const std:: if (ret != PKG_SUCCESS) { PKG_LOGE("Extract file fail %s", name.c_str()); ClosePkgStream(stream); + stream = nullptr; return ret; } return LoadPackageWithStream(path, fileIds, type, stream); @@ -393,7 +394,7 @@ int32_t PkgManagerImpl::LoadPackage(const std::string &packagePath, std::vector< } int32_t PkgManagerImpl::LoadPackageWithStreamForApp(AppPkgInfo &info, - std::vector &fileIds, StreamPtr stream) + std::vector &fileIds, StreamPtr &stream) { int32_t ret = SetSignVerifyKeyName(info.keyPath); if (ret != PKG_SUCCESS) { @@ -404,6 +405,8 @@ int32_t PkgManagerImpl::LoadPackageWithStreamForApp(AppPkgInfo &info, PkgFilePtr pkgFile = CreatePackage(stream, static_cast(info.type), nullptr); if (pkgFile == nullptr) { PKG_LOGE("Create package fail %s", info.packagePath.c_str()); + ClosePkgStream(stream); + stream = nullptr; UPDATER_LAST_WORD(ret); return PKG_INVALID_PARAM; } @@ -412,6 +415,7 @@ int32_t PkgManagerImpl::LoadPackageWithStreamForApp(AppPkgInfo &info, PKG_LOGE("Read img hash data fail %s", info.pkgType.c_str()); delete pkgFile; pkgFile = nullptr; + stream = nullptr; UPDATER_LAST_WORD(ret); return ret; } @@ -423,6 +427,7 @@ int32_t PkgManagerImpl::LoadPackageWithStreamForApp(AppPkgInfo &info, PKG_LOGE("Load package fail %s", info.packagePath.c_str()); delete pkgFile; pkgFile = nullptr; + stream = nullptr; UPDATER_LAST_WORD(ret); return ret; } @@ -431,7 +436,7 @@ int32_t PkgManagerImpl::LoadPackageWithStreamForApp(AppPkgInfo &info, } int32_t PkgManagerImpl::LoadPackageWithStream(const std::string &packagePath, const std::string &keyPath, - std::vector &fileIds, uint8_t type, StreamPtr stream) + std::vector &fileIds, uint8_t type, StreamPtr &stream) { int32_t ret = SetSignVerifyKeyName(keyPath); if (ret != PKG_SUCCESS) { @@ -444,13 +449,14 @@ int32_t PkgManagerImpl::LoadPackageWithStream(const std::string &packagePath, co } int32_t PkgManagerImpl::LoadPackageWithStream(const std::string &packagePath, - std::vector &fileIds, PkgFile::PkgType type, PkgStreamPtr stream) + std::vector &fileIds, PkgFile::PkgType type, PkgStreamPtr &stream) { int32_t ret = PKG_SUCCESS; PkgFilePtr pkgFile = CreatePackage(stream, type, nullptr); if (pkgFile == nullptr) { PKG_LOGE("Create package fail %s", packagePath.c_str()); ClosePkgStream(stream); + stream = nullptr; UPDATER_LAST_WORD(ret); return PKG_INVALID_PARAM; } @@ -462,6 +468,7 @@ int32_t PkgManagerImpl::LoadPackageWithStream(const std::string &packagePath, if (ret != PKG_SUCCESS) { PKG_LOGE("Load package fail %s", packagePath.c_str()); delete pkgFile; + stream = nullptr; UPDATER_LAST_WORD(ret); return ret; } diff --git a/services/package/pkg_manager/pkg_manager_impl.h b/services/package/pkg_manager/pkg_manager_impl.h index ba6a6604..dd7a9dcc 100644 --- a/services/package/pkg_manager/pkg_manager_impl.h +++ b/services/package/pkg_manager/pkg_manager_impl.h @@ -64,10 +64,10 @@ public: int32_t LoadPackageWithoutUnPack(const std::string &packagePath, std::vector &fileIds) override; int32_t LoadPackageWithStream(const std::string &packagePath, const std::string &keyPath, - std::vector &fileIds, uint8_t type, StreamPtr stream) override; + std::vector &fileIds, uint8_t type, StreamPtr &stream) override; int32_t LoadPackageWithStreamForApp(AppPkgInfo &info, - std::vector &fileIds, StreamPtr stream) override; + std::vector &fileIds, StreamPtr &stream) override; int32_t ParsePackage(StreamPtr stream, std::vector &fileIds, int32_t type) override; @@ -112,7 +112,7 @@ private: std::vector &fileIds); int32_t LoadPackageWithStream(const std::string &packagePath, - std::vector &fileIds, PkgFile::PkgType type, PkgStreamPtr stream); + std::vector &fileIds, PkgFile::PkgType type, PkgStreamPtr &stream); std::string GetPkgName(const std::string &path); diff --git a/test/unittest/script/script_unittest.h b/test/unittest/script/script_unittest.h index 6e58c662..759418ad 100644 --- a/test/unittest/script/script_unittest.h +++ b/test/unittest/script/script_unittest.h @@ -138,7 +138,7 @@ public: return PKG_SUCCESS; } int32_t LoadPackageWithStreamForApp(AppPkgInfo &info, - std::vector &fileIds, StreamPtr stream) override + std::vector &fileIds, StreamPtr &stream) override { return PKG_SUCCESS; } -- Gitee