diff --git a/src/lib/OpenEXR/ImfMisc.cpp b/src/lib/OpenEXR/ImfMisc.cpp index be755b0ae8..e9e034300d 100644 --- a/src/lib/OpenEXR/ImfMisc.cpp +++ b/src/lib/OpenEXR/ImfMisc.cpp @@ -22,6 +22,7 @@ #include #include #include +#include OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER @@ -275,6 +276,20 @@ copyIntoFrameBuffer ( // endPtr += xStride; + if (xStride == 0) + { + throw IEX_NAMESPACE::ArgExc ("Zero stride is invalid."); + } + if ((endPtr - writePtr) / xStride <= 0) + { + // Nothing to do, the specified range is empty. + return; + } + if ((endPtr - writePtr) % xStride != 0) + { + throw IEX_NAMESPACE::ArgExc ("Stride will not exactly span input data."); + } + if (fill) { // @@ -1533,6 +1548,21 @@ copyFromFrameBuffer ( char* localWritePtr = writePtr; const char* localReadPtr = readPtr; endPtr += xStride; + + if (xStride == 0) + { + throw IEX_NAMESPACE::ArgExc ("Zero stride is invalid."); + } + if ((endPtr - localReadPtr) / xStride <= 0) + { + // Nothing to do, the specified range is empty. + return; + } + if ((endPtr - localReadPtr) % xStride != 0) + { + throw IEX_NAMESPACE::ArgExc ("Stride will not exactly span input data."); + } + // // Copy a horizontal row of pixels from a frame // buffer to an output file's line or tile buffer.