@Untainted
어노테이션으로 표시된 매개변수가 있는 메서드로 전달거나 어노테이션이 있는 메서드에서 반환되거나 어노테이션이 있는 필드, 매개변수 또는 지역 변수에 대입되는 경우를 보고합니다. 필드용 Kotlin set
및 get
메서드는 진입접으로 지원되지 않습니다.
안전한 객체(같은 클래스 내)란 다음과 같습니다.
@Untainted
로 표시된 메서드를 호출한 결과@Untainted
로 표시되었으며 안전하지 않은 객체로부터 대입되지 않은 지역 변수 또는 매개변수이 분석은 한 파일 내에서만 수행됩니다. 다른 클래스의 종속성을 처리하려면 옵션을 사용하세요. 이 분석은 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의 새로운 기능