]> git.saurik.com Git - wxWidgets.git/blobdiff - src/html/htmltag.cpp
fix for assert when setting tooltip for a readonly combo
[wxWidgets.git] / src / html / htmltag.cpp
index 454ccafcaf4c5e2439e15f9fabf8fb5caaef6af0..577728d50a366f97c71896d621c498eca63a8531 100644 (file)
@@ -59,7 +59,10 @@ wxHtmlTagsCache::wxHtmlTagsCache(const wxString& source)
             tg = m_CacheSize++;
             m_Cache[tg].Key = stpos = pos++;
             dummy[0] = 0; i = 0;
-            while ((src[pos] != wxT('>')) && (src[pos] != wxT(' '))) {
+            while (pos < lng && 
+                   src[pos] != wxT('>') &&
+                   src[pos] != wxT(' ') && src[pos] != wxT('\r') && 
+                   src[pos] != wxT('\n') && src[pos] != wxT('\t')) {
                 dummy[i] = src[pos++];
                 if ((dummy[i] >= wxT('a')) && (dummy[i] <= wxT('z'))) dummy[i] -= (wxT('a') - wxT('A'));
                 i++;
@@ -68,7 +71,7 @@ wxHtmlTagsCache::wxHtmlTagsCache(const wxString& source)
             m_Cache[tg].Name = new wxChar[i+1];
             memcpy(m_Cache[tg].Name, dummy, (i+1)*sizeof(wxChar));
 
-            while (src[pos] != wxT('>')) pos++;
+            while (pos < lng && src[pos] != wxT('>')) pos++;
 
             if (src[stpos+1] == wxT('/')) { // ending tag:
                 m_Cache[tg].End1 = m_Cache[tg].End2 = -2;
@@ -128,7 +131,9 @@ wxHtmlTag::wxHtmlTag(const wxString& source, int pos, int end_pos, wxHtmlTagsCac
     if (source[i] == '/') {m_Ending = TRUE; i++;}
     else m_Ending = FALSE;
 
-    while ((i < end_pos) && ((c = source[i++]) != ' ') && (c != '>')) {
+    while ((i < end_pos) && 
+               ((c = source[i++]) != ' ' && c != '\r' && c != '\n' && c != '\t' &&
+                c != '>')) {
         if ((c >= 'a') && (c <= 'z')) c -= ('a' - 'A');
         m_Name += c;
     }
@@ -136,6 +141,7 @@ wxHtmlTag::wxHtmlTag(const wxString& source, int pos, int end_pos, wxHtmlTagsCac
     if (source[i-1] != '>')
         while ((i < end_pos) && ((c = source[i++]) != '>')) {
             if ((c >= 'a') && (c <= 'z')) c -= ('a' - 'A');
+            if (c == '\r' || c == '\n' || c == '\t') c = ' '; // make future parsing a bit simpler
             m_Params += c;
             if (c == '"') {
                 while ((i < end_pos) && ((c = source[i++]) != '"')) m_Params += c;