|
8 | 8 | import java.io.ByteArrayOutputStream; |
9 | 9 | import java.io.InputStream; |
10 | 10 | import java.io.Closeable; |
| 11 | +import java.nio.channels.FileChannel; |
| 12 | +import java.nio.channels.ReadableByteChannel; |
| 13 | +import java.nio.channels.WritableByteChannel; |
11 | 14 | import java.nio.file.Path; |
| 15 | +import java.nio.file.Paths; |
12 | 16 | import java.io.IOException; |
13 | 17 |
|
14 | 18 | class TestIO { |
15 | 19 | Object taint() { return null; } |
16 | 20 | String staint(){ return (String) taint(); } |
17 | 21 | byte[] btaint() { return (byte[]) taint(); } |
18 | 22 | InputStream itaint() { return (InputStream) taint(); } |
| 23 | + ReadableByteChannel rbctaint() { return (ReadableByteChannel) taint(); } |
19 | 24 | Reader rtaint() { return new InputStreamReader(itaint()); } |
20 | 25 | Path ptaint() { return (Path) taint(); } |
21 | 26 |
|
@@ -75,6 +80,16 @@ class MyLineProcessor implements LineProcessor<String> { |
75 | 80 | } |
76 | 81 |
|
77 | 82 | void test3() throws IOException { |
| 83 | + { |
| 84 | + ByteArrayOutputStream out = new ByteArrayOutputStream(); |
| 85 | + ByteStreams.copy(itaint(), out); |
| 86 | + sink(out); // $numTaintFlow=1 |
| 87 | + } |
| 88 | + { |
| 89 | + WritableByteChannel out = FileChannel.open(Paths.get("/tmp/xyz")); |
| 90 | + ByteStreams.copy(rbctaint(), out); |
| 91 | + sink(out); // $numTaintFlow=1 |
| 92 | + } |
78 | 93 | sink(ByteStreams.limit(itaint(), 1337)); // $numTaintFlow=1 |
79 | 94 | sink(ByteStreams.newDataInput(btaint())); // $numTaintFlow=1 |
80 | 95 | sink(ByteStreams.newDataInput(btaint(), 0)); // $numTaintFlow=1 |
|
0 commit comments