From d989875a52208e35afbcbd04de7758089e06b985 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Tue, 28 Aug 2007 14:51:46 +0000 Subject: [PATCH] fixed memory leak in RestoreState git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48431 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/html/htmlpars.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/html/htmlpars.cpp b/src/html/htmlpars.cpp index 01e1b30671..201aeecef4 100644 --- a/src/html/htmlpars.cpp +++ b/src/html/htmlpars.cpp @@ -132,8 +132,13 @@ void wxHtmlParser::DoneParser() void wxHtmlParser::SetSource(const wxString& src) { DestroyDOMTree(); - // NB: this is allocated on heap because wxHtmlTag keeps a pointer to - // this string if WXWIN_COMPATIBILITY_2_8 + // NB: This is allocated on heap because wxHtmlTag uses iterators and + // making a copy of m_Source string in SetSourceAndSaveState() and + // RestoreState() would invalidate them (because wxString::m_impl's + // memory would change completely twice and iterators use pointers + // into it). So instead, we keep the string object intact and only + // store/restore pointer to it, for which we need it to be allocated + // on the heap. delete m_Source; m_Source = new wxString(src); CreateDOMTree(); @@ -411,6 +416,7 @@ bool wxHtmlParser::RestoreState() if (!m_SavedStates) return false; DestroyDOMTree(); + delete m_Source; wxHtmlParserState *s = m_SavedStates; m_SavedStates = s->m_nextState; -- 2.45.2