diff options
author | Caolán McNamara <caolanm@redhat.com> | 2016-01-21 09:54:29 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2016-01-21 11:47:19 +0000 |
commit | 15b1080e624447ca1af1396023bb1fbfdb44fb26 (patch) | |
tree | 32448dd0c996bd5b91471245f603e133682ed6c6 /vcl/source/filter | |
parent | 52107dddb460d1305a8cf66c15ec70571938bc70 (diff) |
valgrind: memleak on thrown exception
Change-Id: If562dc69290021f898feff9f8e3983b867075172
Diffstat (limited to 'vcl/source/filter')
-rw-r--r-- | vcl/source/filter/igif/gifread.cxx | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/vcl/source/filter/igif/gifread.cxx b/vcl/source/filter/igif/gifread.cxx index 7322ed2a6065..6c1825d2f7da 100644 --- a/vcl/source/filter/igif/gifread.cxx +++ b/vcl/source/filter/igif/gifread.cxx @@ -802,33 +802,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; } |