From a44896c274116a2751e6a5b983daec5d00a075da Mon Sep 17 00:00:00 2001 From: AiChaosN Date: Mon, 9 Jun 2025 17:32:18 +0800 Subject: [PATCH] rebuild Change-Id: Ieaa78811c72a64b8c95cd9e1166377b5fc7bd2a1 Signed-off-by: AiChaosN --- .../innerkitsimpl/codec/src/image_source.cpp | 64 ++++++++++--------- .../imagefwkimagesource_fuzzer/BUILD.gn | 1 + .../src/image_fwk_image_source_fuzzer.cpp | 2 + .../image_source_test/image_source_test.cpp | 3 + interfaces/innerkits/include/image_source.h | 1 + 5 files changed, 42 insertions(+), 29 deletions(-) diff --git a/frameworks/innerkitsimpl/codec/src/image_source.cpp b/frameworks/innerkitsimpl/codec/src/image_source.cpp index fe81ae14e..3a641ae27 100644 --- a/frameworks/innerkitsimpl/codec/src/image_source.cpp +++ b/frameworks/innerkitsimpl/codec/src/image_source.cpp @@ -1855,6 +1855,23 @@ uint32_t ImageSource::CreateExifMetadata(uint8_t *buffer, const uint32_t size, b return SUCCESS; } +uint32_t ImageSource::IsGIFLoopCount(uint32_t index, const std::string &key, std::string &value) +{ + uint32_t ret = 0; + (void)GetFrameCount(ret); + if (ret != SUCCESS || mainDecoder_ == nullptr) { + IMAGE_LOGE("[ImageSource]GetFrameCount get frame sum error."); + return ret; + } else { + ret = mainDecoder_->GetImagePropertyString(index, key, value); + if (ret != SUCCESS) { + IMAGE_LOGE("[ImageSource]GetLoopCount get loop count issue. errorCode=%{public}u", ret); + return ret; + } + } + return ret; +} + uint32_t ImageSource::GetImagePropertyCommon(uint32_t index, const std::string &key, std::string &value) { if (isExifReadFailed_ && exifMetadata_ == nullptr) { @@ -1873,7 +1890,7 @@ uint32_t ImageSource::GetImagePropertyCommon(uint32_t index, const std::string & return ret; } - return exifMetadata_->GetValue(key, value); + return ret; } uint32_t ImageSource::GetImagePropertyInt(uint32_t index, const std::string &key, int32_t &value) @@ -1891,6 +1908,10 @@ uint32_t ImageSource::GetImagePropertyInt(uint32_t index, const std::string &key } std::string strValue; uint32_t ret = GetImagePropertyCommon(index, key, strValue); + if (ret != SUCCESS) { + return ret; + } + ret = exifMetadata_->GetValue(key, strValue); if (key == "Orientation") { if (ORIENTATION_INT_MAP.count(strValue) == 0) { IMAGE_LOGD("ORIENTATION_INT_MAP not find %{public}s", strValue.c_str()); @@ -1915,24 +1936,19 @@ uint32_t ImageSource::GetImagePropertyString(uint32_t index, const std::string & } uint32_t ret = SUCCESS; if (IMAGE_GIFLOOPCOUNT_TYPE.compare(key) == ZERO) { - IMAGE_LOGD("GetImagePropertyString special key: %{public}s", key.c_str()); - (void)GetFrameCount(ret); - if (ret != SUCCESS || mainDecoder_ == nullptr) { - IMAGE_LOGE("[ImageSource]GetFrameCount get frame sum error."); - return ret; - } else { - ret = mainDecoder_->GetImagePropertyString(index, key, value); - if (ret != SUCCESS) { - IMAGE_LOGE("[ImageSource]GetLoopCount get loop count issue. errorCode=%{public}u", ret); - return ret; - } - } - return ret; + return IsGIFLoopCount(index, key, value); } std::unique_lock guard(decodingMutex_); std::unique_lock guardFile(fileMutex_); - return GetImagePropertyCommon(index, key, value); + + ret = GetImagePropertyCommon(index, key, value); + if (ret != SUCCESS) { + return ret; + } + + ret = exifMetadata_->GetValue(key, value); + return ret; } uint32_t ImageSource::GetImagePropertyStringBySync(uint32_t index, const std::string &key, std::string &value) @@ -1961,23 +1977,13 @@ uint32_t ImageSource::GetImagePropertyStringBySync(uint32_t index, const std::st std::unique_lock guard(decodingMutex_); std::unique_lock guardFile(fileMutex_); - if (isExifReadFailed_ && exifMetadata_ == nullptr) { - return exifReadStatus_; - } - ret = CreatExifMetadataByImageSource(); + ret = GetImagePropertyCommon(index, key, value); if (ret != SUCCESS) { - if (key.substr(0, KEY_SIZE) == "Hw") { - value = DEFAULT_EXIF_VALUE; - return SUCCESS; - } - IMAGE_LOGD("Failed to create Exif metadata " - "when attempting to get property."); - isExifReadFailed_ = true; - exifReadStatus_ = ret; return ret; } - - if (exifMetadata_->GetValue(key, value) != SUCCESS) { + + ret = exifMetadata_->GetValue(key, value); + if (ret != SUCCESS) { return ERR_IMAGE_PROPERTY_NOT_EXIST; } return SUCCESS; diff --git a/frameworks/innerkitsimpl/test/fuzztest/imagefwkimagesource_fuzzer/BUILD.gn b/frameworks/innerkitsimpl/test/fuzztest/imagefwkimagesource_fuzzer/BUILD.gn index ede7d1bf5..0c60e0408 100644 --- a/frameworks/innerkitsimpl/test/fuzztest/imagefwkimagesource_fuzzer/BUILD.gn +++ b/frameworks/innerkitsimpl/test/fuzztest/imagefwkimagesource_fuzzer/BUILD.gn @@ -39,5 +39,6 @@ ohos_fuzztest("ImageFwkImageSourceFuzzTest") { "c_utils:utils", "graphic_2d:color_manager", "hilog:libhilog", + "libexif:libexif", ] } diff --git a/frameworks/innerkitsimpl/test/fuzztest/imagefwkimagesource_fuzzer/src/image_fwk_image_source_fuzzer.cpp b/frameworks/innerkitsimpl/test/fuzztest/imagefwkimagesource_fuzzer/src/image_fwk_image_source_fuzzer.cpp index dad694664..e3359cd12 100644 --- a/frameworks/innerkitsimpl/test/fuzztest/imagefwkimagesource_fuzzer/src/image_fwk_image_source_fuzzer.cpp +++ b/frameworks/innerkitsimpl/test/fuzztest/imagefwkimagesource_fuzzer/src/image_fwk_image_source_fuzzer.cpp @@ -26,6 +26,7 @@ #include "image_log.h" #include "image_packer.h" #include "image_source.h" +#include "exif_metadata.h" #include "image_utils.h" #include "media_errors.h" @@ -83,6 +84,7 @@ void ImageSourceFuncTest001(std::unique_ptr& imageSource) imageSource->ModifyImageProperty(0, key, value, 0); imageSource->ModifyImageProperty(0, key, value, nullptr, 0); imageSource->GetImagePropertyCommon(0, key, value); + imageSource->exifMetadata_->GetValue(key, value); imageSource->GetImagePropertyInt(0, key, valueInt); imageSource->GetImagePropertyString(0, key, value); imageSource->GetSourceInfo(errCode); diff --git a/frameworks/innerkitsimpl/test/unittest/image_source_test/image_source_test.cpp b/frameworks/innerkitsimpl/test/unittest/image_source_test/image_source_test.cpp index f85c4665e..08d98eec5 100644 --- a/frameworks/innerkitsimpl/test/unittest/image_source_test/image_source_test.cpp +++ b/frameworks/innerkitsimpl/test/unittest/image_source_test/image_source_test.cpp @@ -2861,6 +2861,9 @@ HWTEST_F(ImageSourceTest, GetImagePropertyCommonTest001, TestSize.Level1) std::string key{"Hw"}, value; errorCode = imageSource->GetImagePropertyCommon(0, key, value); + if (errorCode == SUCCESS) { + errorCode = imageSource->exifMetadata_->GetValue(key, value); + } ASSERT_EQ(value, std::string{"default_exif_value"}); ASSERT_EQ(errorCode, SUCCESS); GTEST_LOG_(INFO) << "ImageSourceTest: GetImagePropertyCommonTest001 end"; diff --git a/interfaces/innerkits/include/image_source.h b/interfaces/innerkits/include/image_source.h index 04448eb9e..1f7370602 100644 --- a/interfaces/innerkits/include/image_source.h +++ b/interfaces/innerkits/include/image_source.h @@ -297,6 +297,7 @@ private: IncrementalDecodingContext &recordContext); void SetIncrementalSource(const bool isIncrementalSource); bool IsStreamCompleted(); + uint32_t IsGIFLoopCount(uint32_t index, const std::string &key, std::string &value); uint32_t GetImagePropertyCommon(uint32_t index, const std::string &key, std::string &value); FinalOutputStep GetFinalOutputStep(const DecodeOptions &opts, PixelMap &pixelMap, bool hasNinePatch); bool HasDensityChange(const DecodeOptions &opts, ImageInfo &srcImageInfo, bool hasNinePatch); -- Gitee