Skip to content

Commit 3f3640f

Browse files
Model ByteArrayDataOutput
1 parent 470a2ca commit 3f3640f

File tree

2 files changed

+22
-1
lines changed
  • java/ql
    • src/semmle/code/java/frameworks/guava
    • test/library-tests/frameworks/guava

2 files changed

+22
-1
lines changed

java/ql/src/semmle/code/java/frameworks/guava/IO.qll

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ private class GuavaIoCsv extends SummaryModelCsv {
3737
"com.google.common.io;ByteStreams;false;newDataInput;(byte[]);;Argument[0];ReturnValue;taint",
3838
"com.google.common.io;ByteStreams;false;newDataInput;(byte[],int);;Argument[0];ReturnValue;taint",
3939
"com.google.common.io;ByteStreams;false;newDataInput;(ByteArrayInputStream);;Argument[0];ReturnValue;taint",
40+
"com.google.common.io;ByteStreams;false;newDataOutput;(ByteArrayOutputStream);;Argument[0];ReturnValue;taint",
4041
"com.google.common.io;ByteStreams;false;read;(InputStream,byte[],int,int);;Argument[0];Argument[1];taint",
4142
"com.google.common.io;ByteStreams;false;readFully;(InputStream,byte[]);;Argument[0];Argument[1];taint",
4243
"com.google.common.io;ByteStreams;false;readFully;(InputStream,byte[],int,int);;Argument[0];Argument[1];taint",
@@ -61,7 +62,21 @@ private class GuavaIoCsv extends SummaryModelCsv {
6162
"com.google.common.io;MoreFiles;false;getFileExtension;(Path);;Argument[0];ReturnValue;taint",
6263
"com.google.common.io;MoreFiles;false;getNameWithoutExtension;(Path);;Argument[0];ReturnValue;taint",
6364
"com.google.common.io;LineReader;false;LineReader;(Readable);;Argument[0];ReturnValue;taint",
64-
"com.google.common.io;LineReader;true;readLine;();;Argument[-1];ReturnValue;taint"
65+
"com.google.common.io;LineReader;true;readLine;();;Argument[-1];ReturnValue;taint",
66+
"com.google.common.io;ByteArrayDataOutput;true;toByteArray;();;Argument[-1];ReturnValue;taint",
67+
"com.google.common.io;ByteArrayDataOutput;true;write;(byte[]);;Argument[0];Argument[-1];taint",
68+
"com.google.common.io;ByteArrayDataOutput;true;write;(byte[],int,int);;Argument[0];Argument[-1];taint",
69+
"com.google.common.io;ByteArrayDataOutput;true;write;(int);;Argument[0];Argument[-1];taint",
70+
"com.google.common.io;ByteArrayDataOutput;true;writeByte;(int);;Argument[0];Argument[-1];taint",
71+
"com.google.common.io;ByteArrayDataOutput;true;writeBytes;(String);;Argument[0];Argument[-1];taint",
72+
"com.google.common.io;ByteArrayDataOutput;true;writeChar;(int);;Argument[0];Argument[-1];taint",
73+
"com.google.common.io;ByteArrayDataOutput;true;writeChars;(String);;Argument[0];Argument[-1];taint",
74+
"com.google.common.io;ByteArrayDataOutput;true;writeDouble;(double);;Argument[0];Argument[-1];taint",
75+
"com.google.common.io;ByteArrayDataOutput;true;writeFloat;(float);;Argument[0];Argument[-1];taint",
76+
"com.google.common.io;ByteArrayDataOutput;true;writeInt;(int);;Argument[0];Argument[-1];taint",
77+
"com.google.common.io;ByteArrayDataOutput;true;writeLong;(long);;Argument[0];Argument[-1];taint",
78+
"com.google.common.io;ByteArrayDataOutput;true;writeShort;(int);;Argument[0];Argument[-1];taint",
79+
"com.google.common.io;ByteArrayDataOutput;true;writeUTF;(String);;Argument[0];Argument[-1];taint"
6580
]
6681
}
6782
}

java/ql/test/library-tests/frameworks/guava/TestIO.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ void test3() throws IOException {
8181
sink(ByteStreams.newDataInput(btaint())); // $numTaintFlow=1
8282
sink(ByteStreams.newDataInput(btaint()).readLine()); // $ MISSING:numTaintFlow=1
8383
sink(ByteStreams.newDataInput(new ByteArrayInputStream(btaint()))); // $numTaintFlow=1
84+
ByteArrayOutputStream out = new ByteArrayOutputStream();
85+
out.write(btaint());
86+
sink(ByteStreams.newDataOutput(out)); // $numTaintFlow=1
8487
byte[] b1 = null, b2 = null, b3 = null;
8588
ByteStreams.read(itaint(), b1, 0, 42);
8689
sink(b1); // $numTaintFlow=1
@@ -90,6 +93,9 @@ void test3() throws IOException {
9093
sink(b3); // $numTaintFlow=1
9194
sink(ByteStreams.readBytes(itaint(), new MyByteProcessor())); // $ MISSING:numTaintFlow=1
9295
sink(ByteStreams.toByteArray(itaint())); // $numTaintFlow=1
96+
ByteArrayDataOutput out2 = ByteStreams.newDataOutput();
97+
out2.writeUTF(staint());
98+
sink(out2.toByteArray()); // $numTaintFlow=1
9399

94100
StringBuffer buf = new StringBuffer();
95101
CharStreams.copy(rtaint(), buf);

0 commit comments

Comments
 (0)