cppcheckでMozilla Firefoxのソースコードを静的チェックしてみる


Mozilla Firefoxのソースコードを読んでバグを探していたのですが、ふと、ツールを使って脆弱性を検出できないかなと思って、cppcheckを使ってみることにしました。
他のソースコード静的解析ツールもいずれ使ってみたいのですが、Mozilla FireFoxはC++で記述されているので、とりあえず、cppcheckを使ってみます。
CLionとか、eclipseとかでも使えるみたいですが、とりあえず今日は、Macのターミナルでやってみることにします。

まず、cppcheckと、Mozilla Firefoxのソースコードを展開する必要があるので、ある程度の容量が使えるフォルダにターミナルで移動します。
Firefoxのダウンロードで使うので、Mercurialを事前にインストールしてください。

$mkdir cppcheckExecute
$cd cppcheckExecute
$git clone https://github.com/danmar/cppcheck.git
$hg clone https://hg.mozilla.org/mozilla-central
$cd cppcheck/
$make

これで、cppcheckをコンパイルできます。

$./cppcheck --enable=all /Users/daisuke/Documents/cppcheckExecute/mozilla-central

/Users/daisuke/Documents/cppcheckExecute/mozilla-centralについては、現在Mozilla Firefoxのソースコードを展開しているフォルダに読み替えてください。

実行してみると、全部チェックするのにものすごく時間がかかるはずです。とりあえず一個警告を見つけて、その警告をtrue positiveかfalse positiveかをチェックして、脆弱性だったらBug bounty programで報告してお金ゲットする目的なので、適当なところで中断します。
Control + Cで中断できます。

こんなのがありました。

(error) Uninitialized variable: xxxxxxxxx

xxxxxxxxxは変数が入ります。未初期化変数ですね。一応脆弱性とかだったらまずいので、伏字にしておきます。
該当するソースコードを読んでみると、確かに未初期化変数みたいですね。
これが脆弱性だったら、然るべき対処をした後、公開してもいい状態になったら公開します。
お楽しみに。