私は2つの引数をとり、arg1
をarg2
から読み込みます。母集団ロジックは、オブジェクトに予期しない値がある場合、拡張されたException
とおそらくはNumberFormatException
をスローする可能性があるメソッドを呼び出します。メソッドロジックは:情報の広範なキャッチと疑わしい情報漏洩 - 解決方法
public Type1 populateType1FromType2(Type1 arg1, Type2 arg2) {
if(arg2 is null or empty) {
return arg1;
}
try {
//invoke setters on arg1 and populate values from arg2 //may lead to NPE here or in hierarchy
//statements
} catch(Exception e) { //Issue 1
//log message that this population failed along with exception trace //Issue 2
}
return arg1; //may be null, may be half populated, may be fully populated if no exception above
}
Fortifyを実行した後、上記のスニペットの問題について報告されています。私は型付き例外の目的を破っていることを理解しています。しかし、同じポイントで私はどのように例外が来るので、私たちはそれをキャッチ(問題1)私たちは基本的にログに記録し、失敗したことを通知する(問題2)この問題を処理する方法がわかりません。私は明示的に言及すれば無意味なNPEをキャッチすることはできません。
Fortifyはレポートと期待:
問題1つのレポート:私たちは例外オブジェクトをキャッチされているので例外、Throwableの、エラー、またはプログラムまたはスレッド(の非常にトップレベル以外ではのような幅広い例外クラスをキャッチしないでください。 )
問題1:アプリケーションがnullポインタであっても失敗しないようにしてください。メソッドだけが動作しないため、アプリケーションロジックの他の部分を処理します。
第2版レポート:システムデータまたはデバッグ情報が表示されることがあります。 (例外トレースも追加しているので)
Issue 2:例外が発生した場合、予想される動作をログに記録し、お客様の機密情報は含まず内部IDを記録します。
どうすればよいですか?
具体的には、プログラムで実際に何をしたいですか? – Dziugas
arg1のヌルポインタをチェックしていますか? – Atspulgs
「私は明示的に言及してもナンセンスではありません」 - 意味がありません。なぜオプション<>を戻り値の型として使用しないのですか?なぜあなたはNPEを捕まえるのが無意味だと思いますか? – Prashant