Sider Scan を使って実際のリポジトリで検出されたバグの例

Sider Scan を用いて、活発に活動されている著名なオープンソースプロジェクトを勝手に分析した結果、50以上のメインブランチからバグを発見しています。以下ではその一部を紹介します。


インテル社 Thermal Daemon

コピペで作成されたと思われる、2つの異なるファイル間の重複コードです。オリジナルと思われる右では"cdev_count” に対する処理を、左では同一のロジックで"z_count" に対する処理を行っていますが、110行目でcdev_count を修正するのを忘れています。正常系では問題はありませんが、エラー時のメッセージが全く別のクラスのものになってしまいます。

Sider Scan でバグを検出し、修正提案を送りました。メンテナーにバグであると確認していただき、プルリクエストを送りました。レビューを経てマージされ、現在は修正されています。 https://github.com/intel/thermal_daemon/issues/311

実際の製品画面で詳しく見る

Wordpress

左右の重複コードブロックを見比べた際に、明らかにインスタンス名がずれています(s8 とs10)。$carry8 の値が意図しないものになってしまっている可能性があります。このファイルは、シーケンシャルな変数名を持つ自動生成されたようなコードが3003行も続くため、人間のレビューでこの間違いに気づくのは困難です。


Vercel 社 Hyper

"uninstall" と"install" の類似コードです。しかし左側のコード の60行目の console.log は、エラー出力のため、console.error としなければなりません。この例のように、Sider Scan は純粋な重複コードではなくても、同じような手続きが必要なコードブロックでの記述の一貫性の無さに着目してバグを検出します。


Apache Kafka

WindowsStoreBuilder クラスをコピーしてTimeOrderWindowsStoreBuilder クラスを作成したものと考えられます。左側のコード の30行目で、コピー元のクラス名のまま変更を忘れてしまっています。このままでは、TimeOrderWindowsStoreBuilder クラスのログを追うことができません。


Khronosグループ SPIR-V Tools

同一ファイル内での修正漏れバグ。行(Row) に対する処理と全く同じ処理を列(Column) に対して行うため、コードをコピペしたものと考えられますが、599行目のrows_id が残ってしまっていてバグとなっています。列のIDをメッセージとして出力するところ、行のIDを返してしまっています。

Sider Scan でバグを発見し、GitHub のIssue に報告。メンテナー に"Looks like a copy-paste problem." と認められ、修正されました。https://github.com/KhronosGroup/SPIRV-Tools/issues/4497


Vaadin Flow

同一ファイル内での指摘です。ファイル内の引数で他の箇所は全て”query” が使われていますが、62行目と63行目の2箇所だけ引数が “t” のまま放置されていて一貫性がとれていません。バグではないが、可読性や保守性を考えるとquery に修正しておいた方が良いでしょう。

バグではないがコードの一貫性の観点から修正しておいた方がよいと報告したところ、認められ、修正されました。https://github.com/vaadin/flow/pull/10989


Cisco社 libacv

json_value_init_object で変数を生成し、その生成した変数を json_value_get_object に入れる処理を行っています。しかし、指摘箇所(ピンクの網掛け部) では誤って別の変数が渡されてしまっています。修正漏れバグと考えられます。

影響範囲が大きいため、再調査した後に報告したところ、Cisco 側でもちょうどこのバグを発見したところでした。現在は修正されています。https://github.com/cisco/libacvp/issues/694


NVIDIA社 DALI

重複コードペアの右側のコードは、水平方法の成分 horz_ の値を確認し、その値を取得しています。一方、左側のコードは、垂直方向の成分 vert_ の値の確認を行っていますが、実際に取得しているのは horz_ の値であり、おそらく vert_ への修正漏れバグと考えられます。

Sider Scan でバグを検出しましたが、我々が報告する前に、該当コードがリファクタリングされました。現在は、問題は解消されています。https://github.com/NVIDIA/DALI/pull/3283


ARM社 armnn

重複コードペアの左側のコードはm_ProjectionBias の null チェックを行ってからその値の参照をしていますが、右側のコードでは m_ProjectionWeights の null チェックを行った後、 m_ProjectionBias の参照をしてしまっています。バグの可能性が高いと考えられます。

Sider Scan でバグを発見し、GitHub のIssue に報告。すぐにメンテナーにバグであると認められ、修正されました。
https://github.com/ARM-software/armnn/issues/639