From b75837c680fdd58628b555026d82a54da3b96326 Mon Sep 17 00:00:00 2001 From: liule Date: Fri, 15 Nov 2024 11:22:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=89=E5=85=A8=E8=A7=84=E8=8C=83=E6=95=B4?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: liule --- .../resmgr/include/theme_pack_resource.h | 1 + frameworks/resmgr/src/hap_manager.cpp | 4 +++ frameworks/resmgr/src/hap_resource.cpp | 8 +++++ frameworks/resmgr/src/raw_file_manager.cpp | 7 +++- frameworks/resmgr/src/res_config_impl.cpp | 23 +++++++++---- frameworks/resmgr/src/theme_pack_config.cpp | 3 ++ frameworks/resmgr/src/theme_pack_resource.cpp | 33 +++++++++++++++---- frameworks/resmgr/src/utils/psue_manager.cpp | 8 +++-- frameworks/resmgr/src/utils/string_utils.cpp | 10 ++++-- 9 files changed, 78 insertions(+), 19 deletions(-) diff --git a/frameworks/resmgr/include/theme_pack_resource.h b/frameworks/resmgr/include/theme_pack_resource.h index 50f04c9..38b2947 100644 --- a/frameworks/resmgr/include/theme_pack_resource.h +++ b/frameworks/resmgr/include/theme_pack_resource.h @@ -166,6 +166,7 @@ private: std::vector> > themeValueVec_; std::vector > iconValues_; void ParseJson(const std::string &bundleName, const std::string &moduleName, const std::string &jsonPath); + void ReleaseJson(char* jsonData, FILE* pf); void ParseIcon(const std::string &bundleName, const std::string &moduleName, const std::string &iconPath); void InitThemeRes(std::pair bundleInfo, cJSON *root, std::shared_ptr themeConfig, const std::string &resTypeStr); diff --git a/frameworks/resmgr/src/hap_manager.cpp b/frameworks/resmgr/src/hap_manager.cpp index 719ef88..f660fa6 100644 --- a/frameworks/resmgr/src/hap_manager.cpp +++ b/frameworks/resmgr/src/hap_manager.cpp @@ -605,6 +605,10 @@ std::string GetFilePathFromHap(std::shared_ptr &extracto const std::shared_ptr qd, const ResType resType) { std::string filePath; + if (qd == nullptr) { + RESMGR_HILOGE(RESMGR_TAG, "GetFilePathFromHap qd is null"); + return filePath; + } const std::shared_ptr idItem = qd->GetIdItem(); if (idItem == nullptr || idItem->resType_ != resType) { std::string hapPath = qd->GetIndexPath(); diff --git a/frameworks/resmgr/src/hap_resource.cpp b/frameworks/resmgr/src/hap_resource.cpp index 4c0fb63..db49554 100644 --- a/frameworks/resmgr/src/hap_resource.cpp +++ b/frameworks/resmgr/src/hap_resource.cpp @@ -450,6 +450,10 @@ int HapResource::GetIdByName(const char *name, const ResType resType) const const std::vector HapResource::GetQualifiers() const { std::vector result; + if (resDesc_ == nullptr) { + RESMGR_HILOGE(RESMGR_TAG, "resDesc_ is null! GetQualifiers failed"); + return result; + } for (size_t i = 0; i < resDesc_->keys_.size(); i++) { result.push_back(resDesc_->keys_[i]->ToString()); } @@ -493,6 +497,10 @@ uint32_t HapResource::GetLimitPathsKeys(const std::vector &outValue, bool includeSystem) { + if (resDesc_ == nullptr) { + RESMGR_HILOGE(RESMGR_TAG, "resDesc_ is null! GetLocales failed"); + return; + } if ((!includeSystem && isSystem_) || (!isSystem_ && isOverlay_)) { return; } diff --git a/frameworks/resmgr/src/raw_file_manager.cpp b/frameworks/resmgr/src/raw_file_manager.cpp index dddddc8..15a297b 100644 --- a/frameworks/resmgr/src/raw_file_manager.cpp +++ b/frameworks/resmgr/src/raw_file_manager.cpp @@ -184,7 +184,7 @@ RawFile *LoadRawFileFromHap(const NativeResourceManager *mgr, const char *fileNa size_t len; std::unique_ptr tmpBuf; RState state = mgr->resManager->GetRawFileFromHap(fileName, len, tmpBuf); - if (state != SUCCESS) { + if (state != SUCCESS || tmpBuf == nullptr) { RESMGR_HILOGD(RESMGR_RAWFILE_TAG, "failed to get %{public}s rawfile", fileName); return nullptr; } @@ -200,6 +200,11 @@ RawFile *LoadRawFileFromHap(const NativeResourceManager *mgr, const char *fileNa return nullptr; } result->pf = fdopen(zipFd, "r"); + if (result->pf == nullptr) { + RESMGR_HILOGE(RESMGR_RAWFILE_TAG, "failed open fd = %{public}d", zipFd); + close(zipFd); + return nullptr; + } result->length = static_cast(len); result->resMgr = mgr; return result.release(); diff --git a/frameworks/resmgr/src/res_config_impl.cpp b/frameworks/resmgr/src/res_config_impl.cpp index d8d8cb3..db68533 100644 --- a/frameworks/resmgr/src/res_config_impl.cpp +++ b/frameworks/resmgr/src/res_config_impl.cpp @@ -68,10 +68,15 @@ RState ResConfigImpl::SetPreferredLocaleInfo(Locale &preferredLocaleInfo) const char *script = preferredLocaleInfo.getScript(); const char *region = preferredLocaleInfo.getCountry(); if (Utils::IsStrEmpty(language)) { - delete this->resPreferredLocale_; - delete this->preferredLocaleInfo_; - this->resPreferredLocale_ = nullptr; - this->preferredLocaleInfo_ = nullptr; + if (this->resPreferredLocale_ != nullptr) { + delete this->resPreferredLocale_; + this->resPreferredLocale_ = nullptr; + } + + if (this->preferredLocaleInfo_ != nullptr) { + delete this->preferredLocaleInfo_; + this->preferredLocaleInfo_ = nullptr; + } return SUCCESS; } RState state = BuildResLocale(language, script, region, &this->resPreferredLocale_); @@ -101,7 +106,10 @@ RState ResConfigImpl::BuildResLocale(const char *language, const char *script, return NOT_ENOUGH_MEM; } } - delete *resLocale; + if (*resLocale != nullptr) { + delete *resLocale; + *resLocale = nullptr; + } *resLocale = temp; return state; } @@ -114,7 +122,10 @@ RState ResConfigImpl::BuildLocaleInfo(const ResLocale *resLocale, Locale **local if (!U_SUCCESS(errCode)) { return NOT_ENOUGH_MEM; } - delete *localeInfo; + if (*localeInfo != nullptr) { + delete *localeInfo; + *localeInfo = nullptr; + } *localeInfo = new Locale(temp); return SUCCESS; } diff --git a/frameworks/resmgr/src/theme_pack_config.cpp b/frameworks/resmgr/src/theme_pack_config.cpp index d0172ee..699f4c6 100644 --- a/frameworks/resmgr/src/theme_pack_config.cpp +++ b/frameworks/resmgr/src/theme_pack_config.cpp @@ -33,6 +33,9 @@ void ThemeConfig::SetThemeColorMode(ColorMode colorMode) bool ThemeConfig::Match(const std::shared_ptr &themeConfig, const ResConfigImpl &resConfig) { + if (themeConfig == nullptr) { + return false; + } ColorMode colorMode = resConfig.GetColorMode(); Direction direction = resConfig.GetDirection(); ColorMode themeColorMode_ = themeConfig->GetThemeColorMode(); diff --git a/frameworks/resmgr/src/theme_pack_resource.cpp b/frameworks/resmgr/src/theme_pack_resource.cpp index 2a32d82..bc468e2 100644 --- a/frameworks/resmgr/src/theme_pack_resource.cpp +++ b/frameworks/resmgr/src/theme_pack_resource.cpp @@ -139,6 +139,19 @@ void ThemeResource::InitThemeRes(std::pair bundleInfo, return; } +void ThemeResource::ReleaseJson(char* jsonData, FILE* pf) +{ + if (jsonData != nullptr) { + free(jsonData); + jsonData = nullptr; + } + + if (pf != nullptr) { + fclose(pf); + pf = nullptr; + } +} + void ThemeResource::ParseJson(const std::string &bundleName, const std::string &moduleName, const std::string &jsonPath) { @@ -164,18 +177,26 @@ void ThemeResource::ParseJson(const std::string &bundleName, const std::string & jsonData[len] = '\0'; auto themeConfig = GetThemeConfig(jsonPath); cJSON *jsonValue = cJSON_Parse(jsonData); + if (jsonValue == nullptr) { + ReleaseJson(jsonData, pf); + RESMGR_HILOGE(RESMGR_TAG, "parse json fail"); + return; + } std::pair bundleInfo(bundleName, moduleName); cJSON *floatRoot = cJSON_GetObjectItem(jsonValue, "float"); + if (floatRoot == nullptr) { + ReleaseJson(jsonData, pf); + cJSON_Delete(jsonValue); + RESMGR_HILOGE(RESMGR_TAG, "get float fail"); + return; + } InitThemeRes(bundleInfo, floatRoot, themeConfig, "float"); cJSON *colorRoot = cJSON_GetObjectItem(jsonValue, "color"); - InitThemeRes(bundleInfo, colorRoot, themeConfig, "color"); - free(jsonData); - jsonData = nullptr; - if (pf != nullptr) { - fclose(pf); - pf = nullptr; + if (colorRoot != nullptr) { + InitThemeRes(bundleInfo, colorRoot, themeConfig, "color"); } + ReleaseJson(jsonData, pf); cJSON_Delete(jsonValue); return; } diff --git a/frameworks/resmgr/src/utils/psue_manager.cpp b/frameworks/resmgr/src/utils/psue_manager.cpp index 83111e5..0f8a0f5 100644 --- a/frameworks/resmgr/src/utils/psue_manager.cpp +++ b/frameworks/resmgr/src/utils/psue_manager.cpp @@ -167,11 +167,13 @@ void PsueManager::ToAccent(wstring &ws) const std::string PsueManager::ToWstring(std::wstring &dest, const std::string &src) { - std::string result = setlocale(LC_CTYPE, ""); + char* result = setlocale(LC_CTYPE, ""); + if (result == nullptr) { + return "set locale fail"; + } size_t destSize = mbstowcs(NULL, src.c_str(), 0); if (destSize == size_t(-1)) { - cout << result << endl; - return "get widechar size fail "; + return "get widechar size fail"; } vector buf(destSize + 1); if (mbstowcs(&buf[0], src.c_str(), src.size()) == static_cast(-1)) { diff --git a/frameworks/resmgr/src/utils/string_utils.cpp b/frameworks/resmgr/src/utils/string_utils.cpp index e517243..77b88a9 100644 --- a/frameworks/resmgr/src/utils/string_utils.cpp +++ b/frameworks/resmgr/src/utils/string_utils.cpp @@ -73,6 +73,9 @@ std::string FormatString(const char *fmt, va_list args) va_copy(tmpArgs, args); int nLength = vsnprintf(nullptr, 0, fmt, tmpArgs); // compute buffer size va_end(tmpArgs); + if (nLength < 0) { + return strResult; + } std::vector vBuffer(nLength + 1, '\0'); int nWritten = vsnprintf_s(&vBuffer[0], nLength + 1, nLength, fmt, args); if (nWritten > 0) { @@ -231,11 +234,12 @@ bool LocalizeNumber(std::string &inputOutputNum, const ResConfigImpl &resConfig, } inputOutputNum.clear(); UErrorCode status = U_ZERO_ERROR; - numberFormat.formatDouble(num, status).toString(status).toUTF8String(inputOutputNum); - if (status == U_ZERO_ERROR) { - RESMGR_HILOGE(RESMGR_TAG, "LocalizeNumber failed, status = %{public}d", status); + icu_72::UnicodeString formattedNum = numberFormat.formatDouble(num, status).toString(status); + if (U_FAILURE(status)) { + RESMGR_HILOGE(RESMGR_TAG, "LocalizeNumber formatDouble failed, status = %{public}d", status); return false; } + formattedNum.toUTF8String(inputOutputNum); return true; #else return true; -- Gitee