From dab91cf8e17dcb4ad98d68e9f9453370c9978d7e Mon Sep 17 00:00:00 2001 From: Mark Callow Date: Sat, 23 Dec 2023 18:00:45 +0900 Subject: [PATCH] Move buffer size check to base class. Refine size calculation. --- tools/imageio/imageinput.cc | 4 +++- tools/imageio/jpg.imageio/jpginput.cc | 8 +------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/tools/imageio/imageinput.cc b/tools/imageio/imageinput.cc index 2541c064e9..aa578ca268 100644 --- a/tools/imageio/imageinput.cc +++ b/tools/imageio/imageinput.cc @@ -314,7 +314,9 @@ ImageInput::readImage(void* pBuffer, size_t bufferByteCount, { const auto& targetFormat = format.isUnknown() ? spec().format() : format; size_t outScanlineByteCount - = targetFormat.basic.bytesPlane0 * spec().width(); + = targetFormat.pixelByteCount() * spec().width(); + if (bufferByteCount < outScanlineByteCount * spec().height()) + throw buffer_too_small(); uint8_t* pDst = static_cast(pBuffer); for (uint32_t y = 0; y < spec().height(); y++) { diff --git a/tools/imageio/jpg.imageio/jpginput.cc b/tools/imageio/jpg.imageio/jpginput.cc index eebb243f73..49d12ad33d 100644 --- a/tools/imageio/jpg.imageio/jpginput.cc +++ b/tools/imageio/jpg.imageio/jpginput.cc @@ -362,16 +362,10 @@ void JpegInput::readImage(void* bufferOut, size_t bufferByteCount, uint subimage, uint miplevel, const FormatDescriptor& format) { - const auto& targetFormat = format.isUnknown() ? spec().format() : format; - size_t outImageByteCount - = targetFormat.basic.bytesPlane0 * spec().width() * spec().height(); - if (bufferByteCount < outImageByteCount) - throw buffer_too_small(); - pJd->begin_decoding(); decodingBegun = true; ImageInput::readImage(bufferOut, bufferByteCount, subimage, miplevel, - targetFormat); + format); }