From b3089993af5efe36f7bf30d2299ffb7871b4d681 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 12 Mar 2014 22:54:26 +0000 Subject: [PATCH] Fix possible memory leak in wxICOHandler loading code. Use wxScopedArray<> instead of a raw pointer to ensure that the memory is always freed, even in case of error return. See #15918. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_3_0_BRANCH@76124 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/imagbmp.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/common/imagbmp.cpp b/src/common/imagbmp.cpp index 7a92ab9217..bade1bd9e2 100644 --- a/src/common/imagbmp.cpp +++ b/src/common/imagbmp.cpp @@ -33,6 +33,7 @@ #include "wx/wfstream.h" #include "wx/quantize.h" #include "wx/scopeguard.h" +#include "wx/scopedarray.h" #include "wx/anidecod.h" // For memcpy @@ -1425,8 +1426,8 @@ bool wxICOHandler::DoLoadFile(wxImage *image, wxInputStream& stream, wxUint16 nType = wxUINT16_SWAP_ON_BE(IconDir.idType); // loop round the icons and choose the best one: - ICONDIRENTRY *pIconDirEntry = new ICONDIRENTRY[nIcons]; - ICONDIRENTRY *pCurrentEntry = pIconDirEntry; + wxScopedArray pIconDirEntry(nIcons); + ICONDIRENTRY *pCurrentEntry = pIconDirEntry.get(); int wMax = 0; int colmax = 0; int iSel = wxNOT_FOUND; @@ -1473,7 +1474,7 @@ bool wxICOHandler::DoLoadFile(wxImage *image, wxInputStream& stream, else { // seek to selected icon: - pCurrentEntry = pIconDirEntry + iSel; + pCurrentEntry = pIconDirEntry.get() + iSel; // NOTE: seeking a positive amount in wxFromCurrent mode allows us to // load even non-seekable streams (see wxInputStream::SeekI docs)! @@ -1491,8 +1492,6 @@ bool wxICOHandler::DoLoadFile(wxImage *image, wxInputStream& stream, } } - delete [] pIconDirEntry; - return bResult; }