diff --git a/src/lib/OpenEXR/ImfDeepScanLineInputFile.cpp b/src/lib/OpenEXR/ImfDeepScanLineInputFile.cpp index 0acbed04b..364a1f04b 100644 --- a/src/lib/OpenEXR/ImfDeepScanLineInputFile.cpp +++ b/src/lib/OpenEXR/ImfDeepScanLineInputFile.cpp @@ -1961,14 +1961,20 @@ readSampleCountForLineBlock(InputStreamMutex* streamData, // @TODO refactor the compressor code to ensure full 64-bit support. // - int compressorMaxDataSize = std::numeric_limits::max(); - if (sampleCountTableDataSize > uint64_t(compressorMaxDataSize)) + uint64_t compressorMaxDataSize = static_cast(std::numeric_limits::max()); + if (packedDataSize > compressorMaxDataSize || + unpackedDataSize > compressorMaxDataSize || + sampleCountTableDataSize > compressorMaxDataSize) { - THROW (IEX_NAMESPACE::ArgExc, "This version of the library does not " - << "support the allocation of data with size > " - << compressorMaxDataSize - << " file table size :" << sampleCountTableDataSize << ".\n"); + THROW (IEX_NAMESPACE::ArgExc, "This version of the library does not" + << "support the allocation of data with size > " + << compressorMaxDataSize + << " file table size :" << sampleCountTableDataSize + << " file unpacked size :" << unpackedDataSize + << " file packed size :" << packedDataSize << ".\n"); } + + streamData->is->read(data->sampleCountTableBuffer, static_cast(sampleCountTableDataSize)); const char* readPtr;