JD.CAST.SUSP.MIGHT
異なる型の ClassCastException の可能性あり
JD.CAST.SUSP.MIGHT は、オブジェクトが型 A に対する演算子のインスタンスでチェックされた後、型 A と型 B が無関係である可能性がある場合に型 A に変換されるときに起動されます。すなわち、Klocwork は、A が B の派生型であることや、B が A の派生型であることを調べることができません。
脆弱性とリスク
型変換は安全でないため、これはエラーである可能性があります。オブジェクトは B 以外の型である可能性があります。場合によっては、instanceof から cast へのパスに矛盾があると、このエラーは誤検知を生じる可能性があります。
軽減と防止
実際に使用する型 (A または B) を選択し、A に型変換するか、B への instanceof をチェックしてください。
脆弱コード例
コピー
public class Test {
void mayBeBadCast(Object o) {
if (!(o instanceof String)) {
Number n = (Number) o;
System.out.println("May be bad cast");
}
}
}
オブジェクト型に関して不確かな点があるため、4 行目で JD.CAST.SUSP.MIGHT が報告されています。キャストでのこの型の使用は安全でない可能性があります。'! (a instanceof <Type>' 構文を使用すると、'a' の型が不確かになります。