Python Quiz: post #2573 — TG.ME

html.parser молча уходит в O(n²)

Заголовок issue на GitHub — «Another worst case quadratic complexity in HTMLParser». Не первая такая находка в этом парсере — уже показательно.

CVE-2026-15308: скармливаешь html.parser.HTMLParser данные кусками через feed() (как все стриминговые обёртки), а внутри висит незакрытый тег или комментарий — и парсер на каждый чанк заново пересканирует весь буфер и заново его склеивает. Оба действия квадратичные. Пара мегабайт кривого HTML — и CPU в потолке без единой строчки в логе.

9 июля Serhiy Storchaka закрыл баг: буфер теперь список чанков, join и разбор — только когда данных накопилось достаточно. Патч ушёл в ветки 3.10–3.15.

Если где-то html.parser получает сеть или файл кусками — это ровно тот случай, который не поймать юнит-тестом на короткой строке.

🔗 mail.python.org, github.com, github.com
August 5, 2026 21