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' の型が不確かになります。

関連チェッカー