summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2016-01-21 09:54:29 +0000
committerCaolán McNamara <caolanm@redhat.com>2016-01-26 09:01:19 +0000
commita9e35171cfcb741c221151f6fd9c0026349f6f76 (patch)
tree879bb451522818a992ba5de2e5be03d0e9f7247f /vcl
parente0591f72d6088ee392b4c2e41fda8c0dc4faf2a3 (diff)
valgrind: memleak on thrown exception
(cherry picked from commit 15b1080e624447ca1af1396023bb1fbfdb44fb26) Reviewed-on: https://gerrit.libreoffice.org/21736 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: David Tardon <dtardon@redhat.com> (cherry picked from commit 85918431993fe3637145cca62b133c0c21cb5430) Change-Id: If562dc69290021f898feff9f8e3983b867075172
Diffstat (limited to 'vcl')
-rw-r--r--vcl/source/filter/igif/gifread.cxx29
1 files changed, 13 insertions, 16 deletions
diff --git a/vcl/source/filter/igif/gifread.cxx b/vcl/source/filter/igif/gifread.cxx
index cb0e0ee79201..9b4d690e1115 100644
--- a/vcl/source/filter/igif/gifread.cxx
+++ b/vcl/source/filter/igif/gifread.cxx
@@ -804,33 +804,30 @@ ReadState GIFReader::ReadGIF( Graphic& rGraphic )
VCL_DLLPUBLIC bool ImportGIF( SvStream & rStm, Graphic& rGraphic )
{
- GIFReader* pGIFReader = static_cast<GIFReader*>(rGraphic.GetContext());
- SvStreamEndian nOldFormat = rStm.GetEndian();
- ReadState eReadState;
- bool bRet = true;
+ std::unique_ptr<GIFReader> xGIFReader(static_cast<GIFReader*>(rGraphic.GetContext()));
+ rGraphic.SetContext(nullptr);
+ SvStreamEndian nOldFormat = rStm.GetEndian();
rStm.SetEndian( SvStreamEndian::LITTLE );
- if( !pGIFReader )
- pGIFReader = new GIFReader( rStm );
+ if (!xGIFReader)
+ xGIFReader.reset(new GIFReader(rStm));
- rGraphic.SetContext( nullptr );
- eReadState = pGIFReader->ReadGIF( rGraphic );
+ bool bRet = true;
- if( eReadState == GIFREAD_ERROR )
+ ReadState eReadState = xGIFReader->ReadGIF(rGraphic);
+
+ if (eReadState == GIFREAD_ERROR)
{
bRet = false;
- delete pGIFReader;
}
- else if( eReadState == GIFREAD_OK )
- delete pGIFReader;
- else
+ else if (eReadState == GIFREAD_NEED_MORE)
{
- rGraphic = pGIFReader->GetIntermediateGraphic();
- rGraphic.SetContext( pGIFReader );
+ rGraphic = xGIFReader->GetIntermediateGraphic();
+ rGraphic.SetContext(xGIFReader.release());
}
- rStm.SetEndian( nOldFormat );
+ rStm.SetEndian(nOldFormat);
return bRet;
}