JD.EQ.ARR
JD.EQ.ARR は、2 つの配列が equals() メソッドで比較されている場合に報告されます。
脆弱性とリスク
配列上で呼び出された equals() メソッドは、'==' 演算子と同一の演算を行い、配列そのものではなく、参照の比較を行います。これは、おそらくエラーです。ディープ配列比較が必要です。
軽減と防止
このメソッド呼び出しをディープ配列比較 Arrays.equals(arr1,arr2) の呼び出しに変更するか、直接参照比較 arr1==arr2 を使用してください (ただし、オブジェクトがまったく同一の場合のみ)。
例 1
コピー
static class MyClass {
String names[];
public boolean equals(Object o) {
if (!(o instanceof MyClass))
return false;
MyClass m = (MyClass)o;
return this.names.equals(m.names);
}
}
JD.EQ.ARR が 15 行目の 'equals' の呼び出しに対して報告されています。'equals' メソッドを使用して配列が比較されています。配列の場合、'equals' は配列内容の値ではなく、2 つの配列の ID を比較します。おそらく、java.util.Arrays.equals(...) の呼び出しに置き換える必要があります。