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;
+ wxInt32 old_pos = pos;
bool foundCloseTag = false;
-
+
// find next matching tag
int tag_len = wxStrlen(tagBuffer);
while (pos < lng)
}
// found a match
- if (match_pos == tag_len)
+ if (match_pos == tag_len)
{
pos = pos - tag_len - 3;
foundCloseTag = true;
int delta = (at < m_Cache[m_CachePos].Key) ? -1 : 1;
do
{
+ if ( m_CachePos < 0 || m_CachePos == m_CacheSize )
+ {
+ // something is very wrong with HTML, give up by returning an
+ // impossibly large value which is going to be ignored by the
+ // caller
+ *end1 =
+ *end2 = INT_MAX;
+ return;
+ }
+
m_CachePos += delta;
}
while (m_Cache[m_CachePos].Key != at);
}
#undef IS_WHITE
- }
- m_Begin = i;
+ }
+ m_Begin = i;
- cache->QueryTag(pos, &m_End1, &m_End2);
- if (m_End1 > end_pos) m_End1 = end_pos;
- if (m_End2 > end_pos) m_End2 = end_pos;
+ cache->QueryTag(pos, &m_End1, &m_End2);
+ if (m_End1 > end_pos) m_End1 = end_pos;
+ if (m_End2 > end_pos) m_End2 = end_pos;
}
wxHtmlTag::~wxHtmlTag()