Gleamコンパイラをファジングで攻めてみた——ランダム生成プログラムが明らかにしたバグ

Fuzzing the Gleam Compiler

Gleamコンパイラをファジングで攻めてみた——ランダム生成プログラムが明らかにしたバグ

Gleamコンパイラのコード生成バグを発見するため、構造認識ファジングを実装した話。まずパーサー段階でlibFuzzerを使い、ランダムなバイト列を入力してクラッシュを検出。その結果、`const b = 1 |> 2`のようなパイプライン式がパニックを引き起こすリグレッションを発見した。次に、型安全なプログラムを生成する「スミス」を構築し、ErlangとJavaScriptの出力差分を検証する計画を紹介している。

コンパイラのバグを見つけるために、ランダムなプログラムを生成するなんてできるのだろうか?
  1. nwellnhof

    同じプログラムの出力を両ターゲットで比較して、差異を検出できます。これは差分ファジングと呼ばれ、あらゆる種類のソフトウェアのバグを見つける最も強力な方法の一つです。

  2. goranmoomin

    脆弱かもしれない部分を特定するために小さなLLMを活用し、伝統的な生成・変異ベースのファジングと組み合わせて、エッジケースを引き起こす可能性が高いファズターゲットを生成できるかもしれないという予感があります。llvm-hackme[0]を見るまで、ファジングにLLMを適用することをまったく考えていませんでした。これは従来の変異ファジングとLLM生成のターゲット回帰テストケースの両方を行っており、LLMはPRを理解してエッジケースを狙うのにかなり効果的でした!非常に印象的で、LLMを組み合わせてファジングをより効率的かつ効果的にする方法を考え続けています。// またLLMのコメントで申し訳ありません。私はPLが大好きで、またLLM関連のコンテンツ(もっと面白いものではなく)に貢献してしまい、本当に申し訳なく思っています。

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

  3. stephenlf

    素晴らしい記事です。共有ありがとうございます。LLMベースのファジングに対する率直な見解が大好きです。まさに、同じような問題に直面したときに私がやることそのものです。

この日のほかの記事

2026-08-25