Ticket #91: omega-htmlparser-ignore-javascript-lessthan.patch

File omega-htmlparser-ignore-javascript-lessthan.patch, 1.5 KB (added by Olly Betts, 18 years ago)

Patch to fix this bug

  • htmlparse.h

     
    3028class HtmlParser {
    3129    protected:
    3230        void decode_entities(string &s);
     31        bool in_script;
    3332        static map<string, unsigned int> named_ents;
    3433    public:
    3534        virtual void process_text(const string &/*text*/) { }
  • htmlparse.cc

     
    240240void
    241241HtmlParser::parse_html(const string &body)
    242242{
     243    in_script = false;
     244
    243245    map<string,string> Param;
    244246    string::const_iterator start = body.begin();
    245247
     
    253255            if (p == body.end()) break;
    254256            char ch = *(p + 1);
    255257            // Tag, closing tag, comment (or SGML declaration), or PHP.
    256             if (isalpha(ch) || ch == '/' || ch == '!' || ch == '?') break;
     258            if ((!in_script && isalpha(ch)) || ch == '/' || ch == '!' || ch == '?') break;
    257259            p++;
    258260        }
    259261
     
    338340               
    339341            if (closing) {
    340342                closing_tag(tag);
     343                if (in_script && tag == "script") in_script = false;
    341344                   
    342345                /* ignore any bogus parameters on closing tags */
    343346                p = find(start, body.end(), '>');
     
    393396                opening_tag(tag, Param);
    394397                Param.clear();
    395398
     399                // In <script> tags we ignore opening tags to avoid problems with "a<b".
     400                if (tag == "script") in_script = true;
     401
    396402                if (start != body.end() && *start == '>') ++start;
    397403            }
    398404        }