Files
Bart van Helvert 72b748d5e0 [kotlin] Run Kotlin JVM tests on both K1 and K2 frontend
#IDEA-354810 Fixed


(cherry picked from commit d29d3256472dfe368161335732ded20ae95cf34e)

IJ-MR-140910

GitOrigin-RevId: 0a9b3cae7aab473f732012ad91b4e67f97ff8697
2024-08-02 11:11:07 +00:00

127 lines
3.1 KiB
Kotlin

import org.checkerframework.checker.tainting.qual.Tainted
import org.checkerframework.checker.tainting.qual.Untainted
class Simple {
fun simple() {
val s = source()
sink(<warning descr="Unsafe string is used as safe parameter">s</warning>)
}
fun alias() {
val s1 = source()
sink(<warning descr="Unsafe string is used as safe parameter">s1</warning>)
}
fun unknown() {
val s = foo()
sink(s)
}
fun unknown2(v: String) {
val s = foo2(v)
sink(<warning descr="Unknown string is used as safe parameter">s</warning>)
}
fun literalOnly() {
var s: String? = <warning descr="[VARIABLE_WITH_REDUNDANT_INITIALIZER] Variable 's' initializer is redundant">null</warning>
s = "safe"
sink(s)
}
fun safeCall() {
var s: String? = <warning descr="[VARIABLE_WITH_REDUNDANT_INITIALIZER] Variable 's' initializer is redundant">"safe"</warning>
s = safe()
sink(s)
}
fun sourceCallToSink() {
sink(<warning descr="Unsafe string is used as safe parameter">source()</warning>)
}
fun safeCallToSink() {
sink(safe())
}
fun sourceFromClass() {
val s = WithSourceParent().source()
sink(<warning descr="Unsafe string is used as safe parameter">s</warning>)
}
fun sourceFromChildClass() {
val child = WithSourceChild()
val s = child.source()
sink(<warning descr="Unsafe string is used as safe parameter">s</warning>)
}
fun withParenthesis() {
var s1 = <warning descr="[VARIABLE_WITH_REDUNDANT_INITIALIZER] Variable 's1' initializer is redundant">(source())</warning>
s1 = (foo())
val s = (s1)
sink((s))
}
fun unsafeReturn(): @Untainted String? {
return <warning descr="Unsafe string is returned from safe method">source()</warning>
}
fun unsafeConcat() {
@Tainted val s = source()
val s1 = "safe"
val s2 = "safe2"
sink(<warning descr="Unsafe string is used as safe parameter">s1 + s + s2</warning>)
}
fun unsafeTernary(b: Boolean) {
@Tainted val s = source()
sink(<warning descr="Unsafe string is used as safe parameter">if (b) s else null</warning>)
}
fun unknownIfExpression(b: Boolean): @Untainted String {
var s: String = if (b) bar() else foo()
return s
}
fun unknownIfExpression(b: Boolean, v: String): @Untainted String {
var s: String = if (b) bar() else foo2(v)
return <warning descr="Unknown string is returned from safe method">s</warning>
}
fun callSource(): String {
return source()
}
fun foo(): String {
return "some"
}
fun foo2(v: String): String {
return v
}
fun bar(): String {
return "other"
}
fun safe(): @Untainted String? {
return "safe"
}
@Tainted
fun source(): String {
return "tainted"
}
fun sink(<warning descr="[UNUSED_PARAMETER] Parameter 's1' is never used">s1</warning>: @Untainted String?) {}
internal open inner class WithSourceParent {
@Tainted
open fun source(): String {
return "tainted"
}
}
internal inner class WithSourceChild : WithSourceParent() {
override fun source(): String {
return super.source()
}
}
}