# HG changeset patch # User Sebastien Jodogne # Date 1774012381 -3600 # Node ID 786fa27700ca4584fd6886c8396ad40301d8e39c # Parent 7053ed3deb68dd876592b4386b16041badda5d32 added safeguards for 1bpp PAM diff -r 7053ed3deb68 -r 786fa27700ca OrthancFramework/Sources/DicomFormat/DicomImageInformation.cpp --- a/OrthancFramework/Sources/DicomFormat/DicomImageInformation.cpp Mon Mar 16 15:09:06 2026 +0100 +++ b/OrthancFramework/Sources/DicomFormat/DicomImageInformation.cpp Fri Mar 20 14:13:01 2026 +0100 @@ -461,13 +461,15 @@ size_t DicomImageInformation::GetFrameSize() const { + uint64_t totalFrameSize; + if (bitsStored_ == 1) { assert(GetWidth() % 8 == 0); if (GetChannelCount() == 1) { - return GetHeight() * GetWidth() / 8; + totalFrameSize = static_cast(GetHeight()) * static_cast(GetWidth()) / 8; } else { @@ -477,16 +479,19 @@ } else { - uint64_t totalFrameSize = static_cast(GetHeight()) * - GetWidth() * - GetBytesPerValue() * - GetChannelCount(); + totalFrameSize = (static_cast(GetHeight()) * + static_cast(GetWidth()) * + static_cast(GetBytesPerValue()) * + static_cast(GetChannelCount())); + } - if (totalFrameSize > MAX_FRAME_SIZE) - { - throw OrthancException(ErrorCode_BadFileFormat, "DICOM Frame size overflow"); - } - + if (totalFrameSize > MAX_FRAME_SIZE || + static_cast(static_cast(totalFrameSize)) != totalFrameSize) + { + throw OrthancException(ErrorCode_BadFileFormat, "DICOM Frame size overflow"); + } + else + { return static_cast(totalFrameSize); } }