Skip to content

Commit a4429d0

Browse files
author
Benjamin Muskalla
committed
Add tests for writer models
1 parent 37ca6a5 commit a4429d0

File tree

3 files changed

+33
-4
lines changed

3 files changed

+33
-4
lines changed

java/ql/lib/semmle/code/java/frameworks/JavaIo.qll

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@
33
import java
44
private import semmle.code.java.dataflow.ExternalFlow
55

6-
private class ObjectsSummaryCsv extends SummaryModelCsv {
6+
private class JavaIoSummaryCsv extends SummaryModelCsv {
77
override predicate row(string row) {
88
row =
99
[
1010
//`namespace; type; subtypes; name; signature; ext; input; output; kind`
11-
"java.lang;Appendable;false;append;;;Argument[0];Argument[-1];value",
12-
"java.lang;Appendable;false;append;;;Argument[-1];ReturnValue;value",
13-
"java.io;Writer;false;write;;;Argument[0];Argument[-1];value"
11+
"java.lang;Appendable;true;append;;;Argument[0];Argument[-1];taint",
12+
"java.lang;Appendable;true;append;;;Argument[-1];ReturnValue;taint",
13+
"java.io;Writer;true;write;;;Argument[0];Argument[-1];taint",
14+
"java.io;StringWriter;false;toString;;;Argument[-1];ReturnValue;taint"
1415
]
1516
}
1617
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import java.io.*;
2+
3+
public class JavaIo {
4+
public static String taint() { return "tainted"; }
5+
6+
public static void sink(Object o) { }
7+
8+
void testWritingChars() throws IOException {
9+
StringWriter w = new StringWriter();
10+
char[] chars = taint().toCharArray();
11+
sink(w.toString());
12+
w.write(chars);
13+
sink(w.toString());
14+
sink(w.getBuffer().toString());
15+
}
16+
17+
void testAppendingToWriter() throws IOException {
18+
StringWriter w = new StringWriter();
19+
CharSequence seq = taint();
20+
sink(w.toString());
21+
w.append(seq);
22+
sink(w.toString());
23+
}
24+
25+
}

java/ql/test/library-tests/dataflow/taint/test.expected

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@
4444
| CharSeq.java:7:26:7:32 | taint(...) | CharSeq.java:8:12:8:14 | seq |
4545
| CharSeq.java:7:26:7:32 | taint(...) | CharSeq.java:11:12:11:21 | seqFromSeq |
4646
| CharSeq.java:7:26:7:32 | taint(...) | CharSeq.java:14:12:14:24 | stringFromSeq |
47+
| JavaIo.java:10:20:10:26 | taint(...) | JavaIo.java:13:10:13:21 | toString(...) |
48+
| JavaIo.java:10:20:10:26 | taint(...) | JavaIo.java:14:10:14:33 | toString(...) |
49+
| JavaIo.java:19:24:19:30 | taint(...) | JavaIo.java:22:10:22:21 | toString(...) |
4750
| MethodFlow.java:7:22:7:28 | taint(...) | MethodFlow.java:8:10:8:16 | tainted |
4851
| MethodFlow.java:9:31:9:37 | taint(...) | MethodFlow.java:10:10:10:17 | tainted2 |
4952
| MethodFlow.java:11:35:11:41 | taint(...) | MethodFlow.java:12:10:12:17 | tainted3 |

0 commit comments

Comments
 (0)