Skip to content

Commit b0c6db4

Browse files
committed
Kotlin: add missing dataflow test for List::iterator
1 parent ab920d3 commit b0c6db4

File tree

3 files changed

+44
-0
lines changed

3 files changed

+44
-0
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class ListFlowTest {
2+
fun <T> taint(t: T) = t
3+
fun sink(a: Any) {}
4+
5+
fun test(l: MutableList<String>) {
6+
l[0] = taint("a")
7+
sink(l)
8+
sink(l[0])
9+
for (s in l) {
10+
sink(s)
11+
}
12+
13+
val a = arrayOf(taint("a"), "b")
14+
sink(a)
15+
sink(a[0])
16+
for (s in a) {
17+
sink(s)
18+
}
19+
}
20+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
| list.kt:6:23:6:23 | a | list.kt:7:14:7:14 | l |
2+
| list.kt:6:23:6:23 | a | list.kt:8:14:8:17 | get(...) |
3+
| list.kt:13:32:13:32 | a | list.kt:14:14:14:14 | a |
4+
| list.kt:13:32:13:32 | a | list.kt:15:14:15:17 | ...[...] |
5+
| list.kt:13:32:13:32 | a | list.kt:17:18:17:18 | s |
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import java
2+
import semmle.code.java.dataflow.TaintTracking
3+
import semmle.code.java.dataflow.ExternalFlow
4+
5+
class Conf extends TaintTracking::Configuration {
6+
Conf() { this = "qltest:mad-summaries" }
7+
8+
override predicate isSource(DataFlow::Node n) {
9+
n.asExpr().(Argument).getCall().getCallee().hasName("taint")
10+
}
11+
12+
override predicate isSink(DataFlow::Node n) {
13+
n.asExpr().(Argument).getCall().getCallee().hasName("sink")
14+
}
15+
}
16+
17+
from DataFlow::Node src, DataFlow::Node sink, Conf conf
18+
where conf.hasFlow(src, sink)
19+
select src, sink

0 commit comments

Comments
 (0)