diff options
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/source/filter/igif/decode.cxx | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/vcl/source/filter/igif/decode.cxx b/vcl/source/filter/igif/decode.cxx index 276d75c64e24..2aeccb335483 100644 --- a/vcl/source/filter/igif/decode.cxx +++ b/vcl/source/filter/igif/decode.cxx @@ -71,7 +71,7 @@ Scanline GIFLZWDecompressor::DecompressBlock( sal_uInt8* pSrc, sal_uInt8 cBufSiz nBlockBufPos = 0; pBlockBuf = pSrc; - while( ProcessOneCode() ) + while (pTarget && ProcessOneCode()) { nCount += nOutBufDataLen; @@ -79,7 +79,14 @@ Scanline GIFLZWDecompressor::DecompressBlock( sal_uInt8* pSrc, sal_uInt8 cBufSiz { sal_uLong nNewSize = nTargetSize << 1; sal_uLong nOffset = pTmpTarget - pTarget; - pTarget = static_cast<sal_uInt8*>(std::realloc( pTarget, nNewSize )); + if (auto p = static_cast<sal_uInt8*>(std::realloc(pTarget, nNewSize))) + pTarget = p; + else + { + free(pTarget); + pTarget = nullptr; + break; + } nTargetSize = nNewSize; pTmpTarget = pTarget + nOffset; |