@Untainted
アノテーションが付いたパラメーターのあるメソッドに渡され、アノテーション付きのメソッドから返されているか、アノテーション付きのフィールド、パラメーター、またはローカル変数に割り当てられている場合に報告します。 フィールドの Kotlin set
および get
メソッドはエントリポイントとしてサポートされていません。
(同じクラス内の) 安全なオブジェクトには次のものがあります。
@Untainted
が付いているメソッドの呼び出しの結果@Untainted
が付いており、安全でないオブジェクトから割り当てられていないローカル変数またはパラメーター解析は 1 つのファイル内でのみ実行されます。 他のクラスの依存関係を処理するには、オプションを使用します。 解析は private または static にまで拡張されますが、深さの伝播に制限があります。
例:
void doSmth(boolean b) {
String s = safe();
String s1 = "other";
if (b) s1 = s;
sink(s);
}
String sink(@Untainted String s) {}
ここでは s
に対する安全でない文字列代入がないため、警告は発生しません。 別の例:
void doSmth(boolean b) {
String s = safe();
String s1 = "other";
s1 = foo();
if (b) s = s1;
sink(s); // ここで警告が発生します
}
String foo();
String sink(@Untainted String s) {}
ここでは foo
呼び出しの結果を代入した後の s1
の状態が不明であるため、警告が発生します。
2021.2 の新機能です