From eb39a4795d50586402aca4417a410c32483c2b8f Mon Sep 17 00:00:00 2001 From: Peter Hillman Date: Sat, 1 May 2021 10:30:10 +1200 Subject: [PATCH] Prevent overflow in getScanlineChunkOffsetTableSize Signed-off-by: Peter Hillman --- src/lib/OpenEXR/ImfMisc.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/lib/OpenEXR/ImfMisc.cpp b/src/lib/OpenEXR/ImfMisc.cpp index a65e2a3f42..80c8ce8d25 100644 --- a/src/lib/OpenEXR/ImfMisc.cpp +++ b/src/lib/OpenEXR/ImfMisc.cpp @@ -1828,12 +1828,17 @@ getScanlineChunkOffsetTableSize(const Header& header) { const Box2i &dataWindow = header.dataWindow(); - int linesInBuffer = numLinesInBuffer ( header.compression() ); - int lineOffsetSize = (dataWindow.max.y - dataWindow.min.y + + // + // use int64_t types to prevent overflow in lineOffsetSize for images with + // extremely high dataWindows + // + int64_t linesInBuffer = numLinesInBuffer ( header.compression() ); + + int64_t lineOffsetSize = (static_cast (dataWindow.max.y) - static_cast (dataWindow.min.y) + linesInBuffer) / linesInBuffer; - return lineOffsetSize; + return static_cast (lineOffsetSize); } //