diff --git a/pyrogram/client/style/html.py b/pyrogram/client/style/html.py index f861412b..579ed7ec 100644 --- a/pyrogram/client/style/html.py +++ b/pyrogram/client/style/html.py @@ -95,7 +95,16 @@ class Parser(HTMLParser): self.text += data def handle_endtag(self, tag): - self.entities.append(self.tag_entities[tag].pop()) + try: + self.entities.append(self.tag_entities[tag].pop()) + except (KeyError, IndexError): + line, offset = self.getpos() + offset += 1 + + raise ValueError("Unmatched closing tag at line {}:{}".format(tag, line, offset)) + else: + if not self.tag_entities[tag]: + self.tag_entities.pop(tag) def error(self, message): pass @@ -112,6 +121,14 @@ class HTML: parser.feed(text) parser.close() + if parser.tag_entities: + unclosed_tags = [] + + for tag, entities in parser.tag_entities.items(): + unclosed_tags.append("<{}> (x{})".format(tag, len(entities))) + + raise ValueError("Unclosed tags: {}".format(", ".join(unclosed_tags))) + # TODO: OrderedDict to be removed in Python 3.6 return OrderedDict([ ("message", utils.remove_surrogates(parser.text)),