diff --git a/frameworks/innerkitsimpl/utils/src/image_utils.cpp b/frameworks/innerkitsimpl/utils/src/image_utils.cpp index 4ca3a509b0a6440f5612323e2c384298723e67b2..e856ce7d788101d62e9d73bf3669ca39a80add60 100644 --- a/frameworks/innerkitsimpl/utils/src/image_utils.cpp +++ b/frameworks/innerkitsimpl/utils/src/image_utils.cpp @@ -472,20 +472,26 @@ bool ImageUtils::CheckMulOverflow(int32_t width, int32_t bytesPerPixel) bool ImageUtils::CheckMulOverflow(int32_t width, int32_t height, int32_t bytesPerPixel) { + IMAGE_LOGE("chaos CheckMulOverflow 01"); if (width == 0 || height == 0 || bytesPerPixel == 0) { + IMAGE_LOGE("chaos CheckMulOverflow 02"); IMAGE_LOGE("param is 0"); return true; } + IMAGE_LOGE("chaos CheckMulOverflow 03"); int32_t rectSize = width * height; if ((rectSize / width) != height) { + IMAGE_LOGE("chaos CheckMulOverflow 04"); IMAGE_LOGE("width * height overflow!"); return true; } int32_t bufferSize = rectSize * bytesPerPixel; if ((bufferSize / bytesPerPixel) != rectSize) { + IMAGE_LOGE("chaos CheckMulOverflow 05"); IMAGE_LOGE("bytesPerPixel overflow!"); return true; } + IMAGE_LOGE("chaos CheckMulOverflow 06"); return false; } diff --git a/plugins/common/libs/image/libextplugin/src/ext_decoder.cpp b/plugins/common/libs/image/libextplugin/src/ext_decoder.cpp index 7c9079b5e5033422f26916ee2968bc562ccd1f36..c899e269bed7d1f7f7557878131b4ecd00bb7ed8 100644 --- a/plugins/common/libs/image/libextplugin/src/ext_decoder.cpp +++ b/plugins/common/libs/image/libextplugin/src/ext_decoder.cpp @@ -647,16 +647,24 @@ static inline bool IsLowDownScale(const Size &size, SkImageInfo &info) static inline bool IsValidCrop(const OHOS::Media::Rect &crop, SkImageInfo &info, SkIRect &out) { + IMAGE_LOGE("chaos IsValidCrop 01"); out = SkIRect::MakeXYWH(crop.left, crop.top, crop.width, crop.height); + IMAGE_LOGE("chaos IsValidCrop 02"); if (out.fLeft < ZERO || out.fTop < ZERO) { + IMAGE_LOGE("chaos IsValidCrop 03"); return false; } + IMAGE_LOGE("chaos IsValidCrop 04"); if (out.fRight > info.width()) { + IMAGE_LOGE("chaos IsValidCrop 05"); out.fRight = info.width(); } + IMAGE_LOGE("chaos IsValidCrop 06"); if (out.fBottom > info.height()) { + IMAGE_LOGE("chaos IsValidCrop 07"); out.fBottom = info.height(); } + IMAGE_LOGE("chaos IsValidCrop 08"); return true; } @@ -670,25 +678,37 @@ static sk_sp getDesiredColorSpace(SkImageInfo &srcInfo, const Pixe uint32_t ExtDecoder::CheckDecodeOptions(uint32_t index, const PixelDecodeOptions &opts) { + IMAGE_LOGE("chaos 01"); if (ImageUtils::CheckMulOverflow(dstInfo_.width(), dstInfo_.height(), dstInfo_.bytesPerPixel())) { + IMAGE_LOGE("chaos 02"); return ERR_IMAGE_INVALID_PARAMETER; } + IMAGE_LOGE("chaos 03"); IMAGE_LOGD("%{public}s IN, opts.CropRect: xy [%{public}d x %{public}d] wh [%{public}d x %{public}d]", __func__, opts.CropRect.left, opts.CropRect.top, opts.CropRect.width, opts.CropRect.height); + IMAGE_LOGE("chaos 03-1"); if (!IsValidCrop(opts.CropRect, info_, dstSubset_)) { + IMAGE_LOGE("chaos 04"); IMAGE_LOGE("Invalid crop rect top:%{public}d, bottom:%{public}d, left:%{public}d, right:%{public}d", dstSubset_.top(), dstSubset_.bottom(), dstSubset_.left(), dstSubset_.right()); + IMAGE_LOGE("chaos 05"); return ERR_IMAGE_INVALID_PARAMETER; } - IMAGE_LOGD("%{public}s IN, dstSubset_: xy [%{public}d x %{public}d] wh [%{public}d x %{public}d]", - __func__, dstSubset_.left(), dstSubset_.top(), dstSubset_.width(), dstSubset_.height()); + IMAGE_LOGE("chaos 06"); + // IMAGE_LOGD("%{public}s IN, dstSubset_: xy [%{public}d x %{public}d] wh [%{public}d x %{public}d]", + // __func__, dstSubset_.left(), dstSubset_.top(), dstSubset_.width(), dstSubset_.height()); + IMAGE_LOGE("chaos 07"); size_t tempSrcByteCount = info_.computeMinByteSize(); + IMAGE_LOGE("chaos 08"); size_t tempDstByteCount = dstInfo_.computeMinByteSize(); + IMAGE_LOGE("chaos 09"); if (SkImageInfo::ByteSizeOverflowed(tempSrcByteCount) || SkImageInfo::ByteSizeOverflowed(tempDstByteCount)) { + IMAGE_LOGE("chaos 10"); return ERR_IMAGE_TOO_LARGE; } - + IMAGE_LOGE("chaos 11"); dstOptions_.fFrameIndex = static_cast(index); + IMAGE_LOGE("chaos 12"); #ifdef IMAGE_COLORSPACE_FLAG dstColorSpace_ = opts.plDesiredColorSpace; #endif