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
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user