--- svn/HTMLParser.py 2010-09-30 18:49:20.000000000 +0200 +++ fix/HTMLParser.py 2010-09-30 22:23:02.000000000 +0200 @@ -97,6 +97,7 @@ self.lasttag = '???' self.interesting = interesting_normal markupbase.ParserBase.reset(self) + self.cdata_tags = [] def feed(self, data): """Feed data to the parser. @@ -270,6 +271,7 @@ else: self.handle_starttag(tag, attrs) if tag in self.CDATA_CONTENT_ELEMENTS: + self.cdata_tags.append(tag) self.set_cdata_mode() return endpos @@ -316,8 +318,11 @@ if not match: self.error("bad end tag: %r" % (rawdata[i:j],)) tag = match.group(1) - self.handle_endtag(tag.lower()) - self.clear_cdata_mode() + tag = tag.lower() + self.handle_endtag(tag) + if len(self.cdata_tags) > 0 and self.cdata_tags[-1] == tag: + self.cdata_tags.pop() + self.clear_cdata_mode() return j # Overridable -- finish processing of start+end tag: