Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5979981

Browse files
atorralbaigfoo
authored andcommitted
Add test for missing WhenExpr flow
1 parent d4701d7 commit 5979981

3 files changed

Lines changed: 40 additions & 0 deletions

File tree

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class WhenExpr {
2+
fun taint() = Uri()
3+
4+
fun sink(s: String) { }
5+
6+
fun bad() {
7+
val s0 = taint()
8+
sink(s0?.getQueryParameter())
9+
}
10+
}
11+
12+
class Uri {
13+
fun getQueryParameter() = "tainted"
14+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
| NotNullExpr.kt:7:14:7:20 | taint(...) | NotNullExpr.kt:8:15:8:33 | getQueryParameter(...) |
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import java
2+
import semmle.code.java.dataflow.TaintTracking
3+
import semmle.code.java.dataflow.ExternalFlow
4+
5+
class Step extends SummaryModelCsv {
6+
override predicate row(string row) {
7+
row = ";Uri;false;getQueryParameter;;;Argument[-1];ReturnValue;taint"
8+
}
9+
}
10+
11+
class Conf extends TaintTracking::Configuration {
12+
Conf() { this = "qltest:notNullExprFlow" }
13+
14+
override predicate isSource(DataFlow::Node n) {
15+
n.asExpr().(MethodAccess).getMethod().hasName("taint")
16+
}
17+
18+
override predicate isSink(DataFlow::Node n) {
19+
n.asExpr().(Argument).getCall().getCallee().hasName("sink")
20+
}
21+
}
22+
23+
from DataFlow::Node src, DataFlow::Node sink, Conf conf
24+
where conf.hasFlow(src, sink)
25+
select src, sink

0 commit comments

Comments
 (0)