Bug report
Bug description:
The C implementation of the ISO-2022 decoders scans a designation table for the
charset held in the decoder state, but the loop's terminator is compiled only
under Py_DEBUG. On a release build, decoding after an unknown charset is set
via setstate() walks off the table (an out-of-bounds read) and dereferences a
garbage function pointer.
import codecs
d = codecs.getincrementaldecoder("iso-2022-jp")()
d.setstate((b"", 0xff))
d.decode(b"!", final=True) # out-of-bounds read / crash
CPython versions tested on:
3.13, 3.14, 3.15, 3.16
Operating systems tested on:
macOS
Linked PRs
Bug report
Bug description:
The C implementation of the ISO-2022 decoders scans a designation table for the
charset held in the decoder state, but the loop's terminator is compiled only
under
Py_DEBUG. On a release build, decoding after an unknown charset is setvia
setstate()walks off the table (an out-of-bounds read) and dereferences agarbage function pointer.
import codecs
d = codecs.getincrementaldecoder("iso-2022-jp")()
d.setstate((b"", 0xff))
d.decode(b"!", final=True) # out-of-bounds read / crash
CPython versions tested on:
3.13, 3.14, 3.15, 3.16
Operating systems tested on:
macOS
Linked PRs