[Перевод] Самодельный фаззер против Rust-крейта regex: искал один баг, нашёл два

Habr ·

[Перевод] Самодельный фаззер против Rust-крейта regex: искал один баг, нашёл два

Для регулярного выражения .abb|b и строки zabb старая версия Rust-крейта regex возвращала совпадение b вместо всей строки zabb. В обсуждении на lobste.rs этот баг привели как довод в пользу юнит-тестов: универсальный фаззер его не нашёл. Алексей Кладов (matklad) написал свой маленький фаззер, который сверяет regex с крейтом regex_lite как с оракулом, и тот нашёл в той же версии сначала другой баг, а потом и искомый. Разбираем код по шагам: почему генерировать нужно короткие строки из случайного подмножества алфавита, как веса возможностей превращают генератор регулярных выражений в swarm-тестирование и зачем переиспользовать память между итерациями. Читать далее

Источник: Habr