Skip to content

Commit 72af634

Browse files
committed
Kotlin: Add flow through use and with
1 parent 6c5c338 commit 72af634

File tree

4 files changed

+29
-0
lines changed

4 files changed

+29
-0
lines changed

java/ql/lib/ext/kotlin.io.model.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ extensions:
1111
pack: codeql/java-all
1212
extensible: summaryModel
1313
data:
14+
- ["kotlin.io", "CloseableKt", False, "use", "", "", "Argument[0]", "Argument[1].Parameter[0]", "value", "manual"]
15+
- ["kotlin.io", "CloseableKt", False, "use", "", "", "Argument[1].ReturnValue", "ReturnValue", "value", "manual"]
1416
- ["kotlin.io", "FilesKt", False, "normalize", "(File)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"]
1517
- ["kotlin.io", "FilesKt", False, "relativeTo", "(File,File)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"]
1618
- ["kotlin.io", "FilesKt", False, "relativeTo", "(File,File)", "", "Argument[1]", "ReturnValue", "taint", "ai-manual"]

java/ql/lib/ext/kotlin.model.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
extensions:
2+
- addsTo:
3+
pack: codeql/java-all
4+
extensible: summaryModel
5+
data:
6+
- ["kotlin", "StandardKt", False, "with", "", "", "Argument[0]", "Argument[1].Parameter[0]", "value", "manual"]
7+
- ["kotlin", "StandardKt", False, "with", "", "", "Argument[1].ReturnValue", "ReturnValue", "value", "manual"]
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import java.io.Closeable
2+
3+
class UseFlowTest {
4+
fun <T> taint(t: T) = t
5+
fun sink(s: Closeable) { }
6+
7+
fun test(input: Closeable) {
8+
taint(input).use { it -> sink(it) } // $ hasValueFlow
9+
sink(taint(input).use { it }) // $ hasValueFlow
10+
}
11+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class WithFlowTest {
2+
fun <T> taint(t: T) = t
3+
fun sink(s: String) { }
4+
5+
fun test(input: String) {
6+
with(taint(input)) { sink(this) } // $ hasValueFlow
7+
sink(with(taint(input)) { this }) // $ hasValueFlow
8+
}
9+
}

0 commit comments

Comments
 (0)