diff --git a/services/flow_update/update_bin/bin_process.cpp b/services/flow_update/update_bin/bin_process.cpp index 4aa1330c79b128553883e345fece163ac04b78f0..a2f2a10c9919f24578e62965590625a075e3ef94 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 f421921591069b95f8c304f9baf4e9adeda096e8..b38b7b644d38acfb120e057d2f1ad1f507abcfd0 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 b7004c96a3aee5c88110fe12bbeb6e3b50621f63..7f7a0a11b4bf97265a8b9ed3d9849993b0de375b 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 ba6a6604e979f2a0a4021251a96a844b69c82bc0..dd7a9dcc1ac4c2a0e63542a91bb750d7df67819e 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 6e58c6625caf3ba687330dda09860d15bfa68460..759418ad992acbec73eea6e7ac9788fc029fde51 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; }