From 313ffa19c69de498897bb312db6c6f2d127bebd0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Sun, 13 Feb 2005 19:40:03 +0000 Subject: [PATCH] don't crash on unterminated CDATA elements (patch #1117629) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32010 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/html/htmltag.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/html/htmltag.cpp b/src/html/htmltag.cpp index c52656cc8c..5c0a0442a5 100644 --- a/src/html/htmltag.cpp +++ b/src/html/htmltag.cpp @@ -114,9 +114,14 @@ wxHtmlTagsCache::wxHtmlTagsCache(const wxString& source) else { m_Cache[tg].End1 = m_Cache[tg].End2 = -1; - + if (wxIsCDATAElement(tagBuffer)) { + // store the orig pos in case we are missing the closing + // tag (see below) + wxInt32 old_pos = pos; + bool foundCloseTag = false; + // find next matching tag int tag_len = wxStrlen(tagBuffer); while (pos < lng) @@ -147,14 +152,25 @@ wxHtmlTagsCache::wxHtmlTagsCache(const wxString& source) } // found a match - if (match_pos == tag_len) { + if (match_pos == tag_len) + { pos = pos - tag_len - 3; + foundCloseTag = true; break; } - else { + else // keep looking for the closing tag + { ++pos; } } + if (!foundCloseTag) + { + // we didn't find closing tag; this means the markup + // is incorrect and the best thing we can do is to + // ignore the unclosed tag and continue parsing as if + // it didn't exist: + pos = old_pos; + } } } } -- 2.47.2