Фаззинг компилятора Gleam: как случайные программы находят баги

Fuzzing the Gleam Compiler

Фаззинг компилятора Gleam: как случайные программы находят баги

Автор рассказывает, как с помощью структурированного фаззинга ищет баги в компиляторе Gleam. Он генерирует случайные программы, проверяет их на двух целевых платформах (Erlang и JavaScript) и сравнивает результаты. В статье описаны два подхода: фаззинг парсера с помощью libFuzzer и генерация типобезопасных программ с помощью «смита». В итоге удалось найти регрессию на nightly-версии компилятора, связанную с конвейерным оператором в const-выражении.

Один — точно больше, чем ноль.
  1. nwellnhof

    > Мы можем сравнить вывод одной и той же программы для обеих целей и отметить любые различия.

    Это называется дифференциальным фазингом и является одним из самых мощных методов поиска ошибок в любом программном обеспечении.

  2. goranmoomin

    У меня есть предчувствие, что мы могли бы использовать маленькие LLM, чтобы выявлять части, которые могут быть хрупкими, и сочетать их с традиционным фазингом на основе генерации/мутаций для создания фаззинг-целей, которые с большей вероятностью вызовут крайний случай.

    Я вообще не думал о применении LLM к фазингу, пока не увидел llvm-hackme[0], который делает как традиционный мутационный фазинг, так и целевые регрессионные тесты, генерируемые LLM, где LLM довольно эффективно понимает PR и нацеливается на крайние случаи! Это было впечатляюще, и я постоянно думаю о том, как мы можем объединить LLM, чтобы сделать фазинг более эффективным и действенным.

    // Извините за очередной комментарий про LLM. Я очень люблю языки программирования и ужасно извиняюсь, что добавляю еще один контент, связанный с LLM (вместо более интересных вещей!)

    [0]: https://github.com/dtcxzyw/llvm-hackme

  3. stephenlf

    Отличная статья. Спасибо, что поделились. Мне нравится честный взгляд на фазинг на основе LLM. Это именно то, что я бы сделал с похожей проблемой.

Ещё за этот день

2026-08-25