1+ import kotlin.time.Duration
2+ import kotlin.time.ExperimentalTime
3+ import kotlin.time.TimedValue
4+
5+ class Test {
6+ fun <T > taint (t : T ) = t
7+ fun sink (a : Any ) {}
8+
9+ @OptIn(ExperimentalTime ::class )
10+ fun test (b : ByteArray ,
11+ f : kotlin.io.FileTreeWalk ,
12+ c1 : CharArray ,
13+ c2 : CharArray ,
14+ c3 : CharArray ,) {
15+
16+ sink(taint(b).copyOf()) // $ hasTaintFlow
17+ sink(taint(f).maxDepth(1 )) // $ hasTaintFlow
18+
19+ val sb = StringBuilder ()
20+ sink(sb.insertRange(0 , taint(c1), 0 , 0 )) // $ hasTaintFlow
21+ sink(sb) // $ hasTaintFlow
22+
23+ sink(taint(c2) + c3) // $ hasTaintFlow
24+
25+ val p = Pair (taint(" a" ), " " )
26+ sink(p) // $ hasTaintFlow=a
27+ sink(p.component1()) // $ hasTaintFlow=a
28+ sink(p.second)
29+
30+ sink(taint(" b" ).capitalize()) // $ hasTaintFlow=b
31+ sink(taint(" c" ).replaceFirstChar { _ -> ' x' }) // $ hasTaintFlow=c
32+
33+ val t = Triple (" " , taint(" d" ), " " )
34+ sink(t) // $ hasTaintFlow=d
35+ sink(t.component1())
36+ sink(t.second) // $ hasTaintFlow=d
37+
38+ val p1 = taint(" e" ) to " "
39+ sink(p1) // $ hasTaintFlow=e
40+ sink(p1.component1()) // $ hasTaintFlow=e
41+ sink(p1.second)
42+
43+ val l = p.toList()
44+ sink(l) // $ hasTaintFlow=a
45+ sink(l[0 ]) // $ hasTaintFlow=a
46+ for (s in l) {
47+ sink(s) // $ hasTaintFlow=a
48+ }
49+
50+ val tv = TimedValue (taint(" f" ), Duration .parse(" " ))
51+ sink(tv) // $ hasTaintFlow=f
52+ sink(tv.component1()) // $ hasTaintFlow=f
53+ sink(tv.duration)
54+
55+ val mg0 = MatchGroup (taint(" g" ), IntRange (0 , 10 ))
56+ sink(mg0) // $ hasTaintFlow=g
57+ sink(mg0.value) // $ hasTaintFlow=g
58+ sink(mg0.component2())
59+
60+ val iv = IndexedValue <String >(5 , taint(" h" ))
61+ sink(iv) // $ hasTaintFlow=h
62+ sink(iv.index)
63+ sink(iv.component2()) // $ hasTaintFlow=h
64+
65+ val strings = arrayOf(" " , taint(" i" ))
66+ sink(strings.withIndex()) // $ hasTaintFlow=i
67+ sink(strings.withIndex().toList()) // $ hasTaintFlow=i
68+ sink(strings.withIndex().toList()[0 ].value) // $ hasTaintFlow=i
69+ sink(strings.withIndex().toList()[0 ].index)
70+ for (x in strings.withIndex()) {
71+ sink(x.value) // $ hasTaintFlow=i
72+ sink(x.index)
73+ }
74+ }
75+ }
0 commit comments