Bug report
Bug description:
When parsing the input <![CDATA[]]>, the unknown_decl hook is incorrectly called with the corrupted, partial string 'CDATA['.
A correct parser has only two possible-and-correct behaviors:
- If CDATA is supported: Call
handle_cdata('').
- If the declaration is "unrecognized," the
unknown_decl hook must receive the entire content inside <!...>, which would be '[CDATA[]]'.
The actual result ('CDATA[') matches neither of those. I use the private _set_support_cdata(True) method here since I think it was the only available trigger to activate this specific code path to expose the bug.
from html.parser import HTMLParser
class CdataBugParser(HTMLParser):
def __init__(self):
super().__init__()
self.unknown_decls = []
def unknown_decl(self, data):
self.unknown_decls.append(data)
html_input = "<![CDATA[]]>"
parser = CdataBugParser()
parser._set_support_cdata(True)
parser.feed(html_input)
print(parser.unknown_decls)
CPython versions tested on:
3.12
Operating systems tested on:
Linux
Bug report
Bug description:
When parsing the input
<![CDATA[]]>, theunknown_declhook is incorrectly called with the corrupted, partial string'CDATA['.A correct parser has only two possible-and-correct behaviors:
handle_cdata('').unknown_declhook must receive the entire content inside<!...>, which would be'[CDATA[]]'.The actual result (
'CDATA[') matches neither of those. I use the private_set_support_cdata(True)method here since I think it was the only available trigger to activate this specific code path to expose the bug.['CDATA[']CPython versions tested on:
3.12
Operating systems tested on:
Linux