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-26 09:01:19 +0000 |
commit | a9e35171cfcb741c221151f6fd9c0026349f6f76 (patch) | |
tree | 879bb451522818a992ba5de2e5be03d0e9f7247f /vcl | |
parent | e0591f72d6088ee392b4c2e41fda8c0dc4faf2a3 (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.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 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; } |