안전하지 않은 객체가 @Untainted 어노테이션으로 표시된 매개변수가 있는 메서드로 전달거나 어노테이션이 있는 메서드에서 반환되거나 어노테이션이 있는 필드, 매개변수 또는 지역 변수에 대입되는 경우를 보고합니다. 필드용 Kotlin setget 메서드는 진입접으로 지원되지 않습니다.

안전한 객체(같은 클래스 내)란 다음과 같습니다.

또한, static final 필드는 안전한 것으로 간주됩니다.

이 분석은 한 파일 내에서만 수행됩니다. 다른 클래스의 종속성을 처리하려면 옵션을 사용하세요. 이 분석은 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의 새로운 기능