diff --git a/frameworks/innerkitsimpl/common/src/pixel_yuv_ext.cpp b/frameworks/innerkitsimpl/common/src/pixel_yuv_ext.cpp index b31b003615dca1a0c936243753d63541049279ba..61b22fd0f0ab30a6103c8d2f2edb37a693cb2d39 100644 --- a/frameworks/innerkitsimpl/common/src/pixel_yuv_ext.cpp +++ b/frameworks/innerkitsimpl/common/src/pixel_yuv_ext.cpp @@ -371,8 +371,14 @@ uint32_t PixelYuvExt::ApplyColorSpace(const OHOS::ColorManager::ColorSpace &grCo CHECK_ERROR_RETURN_RET_LOG(cond, ERR_IMAGE_COLOR_CONVERT, "ApplyColorSpace size overflow width(%{public}d), height(%{public}d)", width, height); uint8_t *srcData = data_; + + uint64_t rgbaDataSize = static_cast(width) * height * NUM_4; + if (rgbaDataSize > static_cast(INT32_MAX)) { + IMAGE_LOGE("RGBA data size overflow"); + return ERR_IMAGE_COLOR_CONVERT; + } std::unique_ptr RGBAdata = - std::make_unique(width * height * NUM_4); + std::make_unique(static_cast(rgbaDataSize)); if (!PixelYuvExtUtils::Yuv420ToBGRA(srcData, RGBAdata.get(), imageInfo_.size, format, yuvDataInfo)) { IMAGE_LOGE("Yuv420ToBGRA failed"); return ERR_IMAGE_COLOR_CONVERT; @@ -392,8 +398,13 @@ uint32_t PixelYuvExt::ApplyColorSpace(const OHOS::ColorManager::ColorSpace &grCo SkTransYuvInfo dst; dst.info = ToSkImageInfo(bgraImageInfo, grColorSpace.ToSkColorSpace()); + uint64_t rgbaDataCSize = static_cast(width) * height * NUM_4; + if (rgbaDataCSize > static_cast(INT32_MAX)) { + IMAGE_LOGE("RGBA dataC size overflow"); + return ERR_IMAGE_COLOR_CONVERT; + } std::unique_ptr RGBAdataC = - std::make_unique(width * height * NUM_4); + std::make_unique(static_cast(rgbaDataCSize)); // Transfor pixels*by readPixels cond = !src.bitmap.readPixels(dst.info, RGBAdataC.get(), rowStride, 0, 0); CHECK_ERROR_RETURN_RET_LOG(cond, ERR_IMAGE_COLOR_CONVERT, "ReadPixels failed");