summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Page <aptitude@btconnect.com>2016-11-30 09:27:13 +0000
committerMichael Stahl <mstahl@redhat.com>2016-11-30 22:01:22 +0000
commit5de4492eeedc1e23f5f6ac4a775e943c240dced2 (patch)
tree8edc017cb4fe0000175ef567caf33a30d5019b8e
parent52d409f0d657f314a53f945c9ffb5b8025bea034 (diff)
Use smart pointers for allocated objects in the gif loader
Change-Id: Ib9d3bc05fbccc882df8913d3ffcb36be6a9f06dd Reviewed-on: https://gerrit.libreoffice.org/31401 Reviewed-by: Michael Stahl <mstahl@redhat.com> Tested-by: Michael Stahl <mstahl@redhat.com>
-rw-r--r--vcl/source/filter/igif/gifread.cxx20
1 files changed, 9 insertions, 11 deletions
diff --git a/vcl/source/filter/igif/gifread.cxx b/vcl/source/filter/igif/gifread.cxx
index f767f3b1fb5d..75889707e634 100644
--- a/vcl/source/filter/igif/gifread.cxx
+++ b/vcl/source/filter/igif/gifread.cxx
@@ -20,6 +20,7 @@
#include "decode.hxx"
#include "gifread.hxx"
#include <memory>
+#include <o3tl/make_unique.hxx>
#define NO_PENDING( rStm ) ( ( rStm ).GetError() != ERRCODE_IO_PENDING )
@@ -55,8 +56,8 @@ class GIFReader : public GraphicReader
BitmapPalette aGPalette;
BitmapPalette aLPalette;
SvStream& rIStm;
- sal_uInt8* pSrcBuf;
- GIFLZWDecompressor* pDecomp;
+ std::vector<sal_uInt8> aSrcBuf;
+ std::unique_ptr<GIFLZWDecompressor> pDecomp;
BitmapWriteAccess* pAcc8;
BitmapWriteAccess* pAcc1;
long nYAcc;
@@ -112,7 +113,6 @@ GIFReader::GIFReader( SvStream& rStm )
: aGPalette ( 256 )
, aLPalette ( 256 )
, rIStm ( rStm )
- , pDecomp ( nullptr )
, pAcc8 ( nullptr )
, pAcc1 ( nullptr )
, nYAcc ( 0 )
@@ -143,7 +143,7 @@ GIFReader::GIFReader( SvStream& rStm )
, cNonTransIndex1 ( 0 )
{
maUpperName = "SVIGIF";
- pSrcBuf = new sal_uInt8[ 256 ];
+ aSrcBuf.resize(256); // Memory buffer for ReadNextBlock
ClearImageExtensions();
}
@@ -156,8 +156,6 @@ GIFReader::~GIFReader()
if( pAcc8 )
Bitmap::ReleaseAccess( pAcc8 );
-
- delete[] pSrcBuf;
}
void GIFReader::ClearImageExtensions()
@@ -493,7 +491,7 @@ sal_uLong GIFReader::ReadNextBlock()
nRet = 2UL;
else
{
- rIStm.ReadBytes( pSrcBuf, cBlockSize );
+ rIStm.ReadBytes( aSrcBuf.data(), cBlockSize );
if( NO_PENDING( rIStm ) )
{
@@ -502,7 +500,7 @@ sal_uLong GIFReader::ReadNextBlock()
else
{
bool bEOI;
- sal_uInt8* pTarget = pDecomp->DecompressBlock( pSrcBuf, cBlockSize, nRead, bEOI );
+ sal_uInt8* pTarget = pDecomp->DecompressBlock( aSrcBuf.data(), cBlockSize, nRead, bEOI );
nRet = ( bEOI ? 3 : 1 );
@@ -771,7 +769,7 @@ bool GIFReader::ProcessGIF()
else if( NO_PENDING( rIStm ) )
{
bRead = true;
- pDecomp = new GIFLZWDecompressor( cDataSize );
+ pDecomp = o3tl::make_unique<GIFLZWDecompressor>( cDataSize );
eActAction = NEXT_BLOCK_READING;
bOverreadBlock = false;
}
@@ -802,7 +800,7 @@ bool GIFReader::ProcessGIF()
{
if( nRet == 2UL )
{
- delete pDecomp;
+ pDecomp.reset();
CreateNewBitmaps();
eActAction = MARKER_READING;
ClearImageExtensions();
@@ -814,7 +812,7 @@ bool GIFReader::ProcessGIF()
}
else
{
- delete pDecomp;
+ pDecomp.reset();
CreateNewBitmaps();
eActAction = ABORT_READING;
ClearImageExtensions();