Skip to content

Commit 40e47c0

Browse files
author
Benjamin Muskalla
authored
Merge pull request #7082 from bmuskalla/filterOutputStream
Java: Model taint for `FilterOutputStream`
2 parents 1e31416 + bfe2e2e commit 40e47c0

File tree

4 files changed

+15
-8
lines changed

4 files changed

+15
-8
lines changed

java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,11 @@ private predicate summaryModelCsv(string row) {
373373
"java.io;StringReader;false;StringReader;;;Argument[0];Argument[-1];taint",
374374
"java.io;CharArrayReader;false;CharArrayReader;;;Argument[0];Argument[-1];taint",
375375
"java.io;BufferedReader;false;BufferedReader;;;Argument[0];Argument[-1];taint",
376-
"java.io;InputStreamReader;false;InputStreamReader;;;Argument[0];Argument[-1];taint"
376+
"java.io;InputStreamReader;false;InputStreamReader;;;Argument[0];Argument[-1];taint",
377+
"java.io;OutputStream;true;write;(byte[]);;Argument[0];Argument[-1];taint",
378+
"java.io;OutputStream;true;write;(byte[],int,int);;Argument[0];Argument[-1];taint",
379+
"java.io;OutputStream;true;write;(int);;Argument[0];Argument[-1];taint",
380+
"java.io;FilterOutputStream;true;FilterOutputStream;(OutputStream);;Argument[0];Argument[-1];taint"
377381
]
378382
}
379383

java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -376,13 +376,6 @@ private predicate argToQualifierStep(Expr tracked, Expr sink) {
376376
* `arg` is the index of the argument.
377377
*/
378378
private predicate taintPreservingArgumentToQualifier(Method method, int arg) {
379-
exists(Method write |
380-
method.overrides*(write) and
381-
write.hasName("write") and
382-
arg = 0 and
383-
write.getDeclaringType().hasQualifiedName("java.io", "OutputStream")
384-
)
385-
or
386379
method.(TaintPreservingCallable).transfersTaint(arg, -1)
387380
}
388381

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,13 @@ void test6() {
7272
arrayWrite(taint(), b);
7373
sink(b);
7474
}
75+
76+
void testFilterOutputStream() throws IOException {
77+
ByteArrayOutputStream bOutput = new ByteArrayOutputStream();
78+
bOutput.write(taint());
79+
FilterOutputStream filterOutput = new FilterOutputStream(bOutput) {
80+
};
81+
sink(filterOutput);
82+
}
83+
7584
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
| A.java:33:23:33:29 | taint(...) | A.java:34:10:34:27 | toByteArray(...) |
44
| A.java:46:27:46:33 | taint(...) | A.java:47:10:47:30 | toByteArray(...) |
55
| A.java:55:58:55:64 | taint(...) | A.java:61:10:61:16 | dh.data |
6+
| A.java:78:19:78:25 | taint(...) | A.java:81:10:81:21 | filterOutput |
67
| B.java:15:21:15:27 | taint(...) | B.java:18:10:18:16 | aaaargs |
78
| B.java:15:21:15:27 | taint(...) | B.java:21:10:21:10 | s |
89
| B.java:15:21:15:27 | taint(...) | B.java:24:10:24:15 | concat |

0 commit comments

Comments
 (0)