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
|
else
|
||||||
{
|
{
|
||||||
m_Cache[tg].End1 = m_Cache[tg].End2 = -1;
|
m_Cache[tg].End1 = m_Cache[tg].End2 = -1;
|
||||||
|
|
||||||
if (wxIsCDATAElement(tagBuffer))
|
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
|
// find next matching tag
|
||||||
int tag_len = wxStrlen(tagBuffer);
|
int tag_len = wxStrlen(tagBuffer);
|
||||||
while (pos < lng)
|
while (pos < lng)
|
||||||
@@ -147,14 +152,25 @@ wxHtmlTagsCache::wxHtmlTagsCache(const wxString& source)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// found a match
|
// found a match
|
||||||
if (match_pos == tag_len) {
|
if (match_pos == tag_len)
|
||||||
|
{
|
||||||
pos = pos - tag_len - 3;
|
pos = pos - tag_len - 3;
|
||||||
|
foundCloseTag = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else {
|
else // keep looking for the closing tag
|
||||||
|
{
|
||||||
++pos;
|
++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