From db3a0a1ae8a805e4c02acea3e05e0e8b6dea36dd Mon Sep 17 00:00:00 2001 From: reuk Date: Wed, 9 Mar 2022 16:33:52 +0000 Subject: [PATCH] CoreGraphics: Avoid allocating over-large buffers for clipped image data --- .../native/juce_mac_CoreGraphicsContext.mm | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm b/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm index df5f9f9487..344d04dd92 100644 --- a/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm +++ b/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm @@ -124,19 +124,18 @@ public: [] (void * __nullable info, const void*, size_t) { delete (ImageDataContainer::Ptr*) info; }) }; } - CFUniquePtr data (CFDataCreate (nullptr, (const UInt8*) srcData.data, (CFIndex) srcData.size)); + const auto usableSize = jmin ((size_t) srcData.lineStride * (size_t) srcData.height, srcData.size); + CFUniquePtr data (CFDataCreate (nullptr, (const UInt8*) srcData.data, (CFIndex) usableSize)); return detail::DataProviderPtr { CGDataProviderCreateWithCFData (data.get()) }; }(); - CGImageRef imageRef = CGImageCreate ((size_t) srcData.width, - (size_t) srcData.height, - 8, - (size_t) srcData.pixelStride * 8, - (size_t) srcData.lineStride, - colourSpace, getCGImageFlags (juceImage.getFormat()), provider.get(), - nullptr, true, kCGRenderingIntentDefault); - - return imageRef; + return CGImageCreate ((size_t) srcData.width, + (size_t) srcData.height, + 8, + (size_t) srcData.pixelStride * 8, + (size_t) srcData.lineStride, + colourSpace, getCGImageFlags (juceImage.getFormat()), provider.get(), + nullptr, true, kCGRenderingIntentDefault); } //==============================================================================