JD.INF.AREC

JD.INF.AREC は、事前のチェックなしにメソッドが自分自身を呼び出す場合に発生します。

脆弱性とリスク

このメソッドは呼び出されると、自分自身を何度も呼び出し、プログラムスタックがオーバーフローして、JVM が StackOverflowError をスローします。この状態は、プログラマーが意図したものではないことは明らかです。

軽減と防止

JD.INF.AREC には、3 つの原因が考えられます。

  • スペルミスのあるインスタンスオブジェクトが存在する。たとえば、プログラマーが "super.equals(o)" とすべきところを "this.equals(o)" とタイプした場合などです。インスタンスオブジェクトのスペリングを修正してください。
  • メソッドの引数が特定の型に変換されていない。たとえば、this.equals((MyType)o) とする必要がある場合などです。引数を特定の型に変換してください。
  • 再帰を終了する条件が欠落している。再帰を終了する条件を追加してください。

例 1

コピー
    /**
     * Implementation required by the interface.
     * @param o - object to compare
     * @return true, if equal.
     */
    public boolean equals(Object o) {
      return this.equals(o);
    }

JD.INF.AREC が 16 行目の呼び出しに対して報告されています。'equals(java.lang.Object)' が自分自身から呼び出されることによって、見かけ上の無限再帰が発生しています。