Skip to content

Commit 678597f

Browse files
Update CSV rows for collection flow
1 parent dc19d1d commit 678597f

File tree

2 files changed

+34
-29
lines changed

2 files changed

+34
-29
lines changed

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

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,17 @@ private class GuavaBaseCsv extends SummaryModelCsv {
2222
"com.google.common.base;Joiner;false;withKeyValueSeparator;(String);;Argument[0];ReturnValue;taint",
2323
"com.google.common.base;Joiner;false;withKeyValueSeparator;(String);;Argument[-1];ReturnValue;taint",
2424
"com.google.common.base;Joiner;false;withKeyValueSeparator;(char);;Argument[-1];ReturnValue;taint",
25-
// Note: The signatures of some of the appendTo methods involve collection flow
26-
"com.google.common.base;Joiner;false;appendTo;;;Argument[-1..3];Argument[0];taint",
25+
"com.google.common.base;Joiner;false;appendTo;(Appendable,Object,Object,Object[]);;Argument[1..2];Argument[0];taint",
26+
"com.google.common.base;Joiner;false;appendTo;(Appendable,Object,Object,Object[]);;ArrayElement of Argument[3];Argument[0];taint",
27+
"com.google.common.base;Joiner;false;appendTo;(Appendable,Iterable);;Element of Argument[1];Argument[-1];taint",
28+
"com.google.common.base;Joiner;false;appendTo;(Appendable,Object[]);;ArrayElement of Argument[1];Argument[-1];taint",
29+
"com.google.common.base;Joiner;false;appendTo;(Appendable,Iterator);;Element of Argument[1];Argument[-1];taint",
30+
"com.google.common.base;Joiner;false;appendTo;(StringBuilder,Object,Object,Object[]);;Argument[1..2];Argument[0];taint",
31+
"com.google.common.base;Joiner;false;appendTo;(StringBuilder,Object,Object,Object[]);;ArrayElement of Argument[3];Argument[0];taint",
32+
"com.google.common.base;Joiner;false;appendTo;(StringBuilder,Iterable);;Element of Argument[1];Argument[-1];taint",
33+
"com.google.common.base;Joiner;false;appendTo;(StringBuilder,Object[]);;ArrayElement of Argument[1];Argument[-1];taint",
34+
"com.google.common.base;Joiner;false;appendTo;(StringBuilder,Iterator);;Element of Argument[1];Argument[-1];taint",
35+
"com.google.common.base;Joiner;false;appendTo;;;Argument[-1];Argument[0];taint",
2736
"com.google.common.base;Joiner;false;appendTo;;;Argument[0];ReturnValue;value",
2837
"com.google.common.base;Joiner;false;join;;;Argument[-1..2];ReturnValue;taint",
2938
"com.google.common.base;Joiner$MapJoiner;false;useForNull;(String);;Argument[0];ReturnValue;taint",
@@ -42,7 +51,6 @@ private class GuavaBaseCsv extends SummaryModelCsv {
4251
"com.google.common.base;Splitter;false;splitToStream;(CharSequence);;Argument[0];ReturnValue;taint",
4352
"com.google.common.base;Splitter$MapSplitter;false;split;(CharSequence);;Argument[0];ReturnValue;taint",
4453
"com.google.common.base;Preconditions;false;checkNotNull;;;Argument[0];ReturnValue;value",
45-
"com.google.common.base;MoreObjects;false;firstNonNull;;;Argument[0..1];ReturnValue;value",
4654
"com.google.common.base;Verify;false;verifyNotNull;;;Argument[0];ReturnValue;taint",
4755
"com.google.common.base;Ascii;false;toLowerCase;(CharSequence);;Argument[0];ReturnValue;taint",
4856
"com.google.common.base;Ascii;false;toLowerCase;(String);;Argument[0];ReturnValue;taint",
@@ -51,26 +59,28 @@ private class GuavaBaseCsv extends SummaryModelCsv {
5159
"com.google.common.base;Ascii;false;truncate;(CharSequence,int,String);;Argument[0];ReturnValue;taint",
5260
"com.google.common.base;Ascii;false;truncate;(CharSequence,int,String);;Argument[2];ReturnValue;taint",
5361
"com.google.common.base;CaseFormat;true;to;(CaseFormat,String);;Argument[1];ReturnValue;taint",
54-
"com.google.common.base;Converter;true;apply;;;Argument[0];ReturnValue;taint",
55-
"com.google.common.base;Converter;true;convert;;;Argument[0];ReturnValue;taint",
56-
"com.google.common.base;Converter;true;convertAll;;;Argument[0];ReturnValue;taint",
62+
"com.google.common.base;Converter;true;apply;(Object);;Argument[0];ReturnValue;taint",
63+
"com.google.common.base;Converter;true;convert;(Object);;Argument[0];ReturnValue;taint",
64+
"com.google.common.base;Converter;true;convertAll;(Iterable);;Element of Argument[0];Element of ReturnValue;taint",
5765
"com.google.common.base;Supplier;true;get;();;Argument[0];ReturnValue;taint",
58-
"com.google.common.base;Suppliers;false;ofInstance;(T);;Argument[0];ReturnValue;taint",
59-
"com.google.common.base;Suppliers;false;memoize;(Supplier<T>);;Argument[0];ReturnValue;taint",
60-
"com.google.common.base;Suppliers;false;memoizeWithExpiration;(Supplier<T>,long,TimeUnit);;Argument[0];ReturnValue;taint",
61-
"com.google.common.base;Suppliers;false;synchronizedSupplier;(Supplier<T>);;Argument[0];ReturnValue;taint",
62-
"com.google.common.base;Optional;true;fromJavaUtil;(Optional<T>);;Argument[0];ReturnValue;taint",
63-
"com.google.common.base;Optional;true;fromNullable;(T);;Argument[0];ReturnValue;taint",
64-
"com.google.common.base;Optional;true;get;();;Argument[-1];ReturnValue;taint",
65-
"com.google.common.base;Optional;true;asSet;();;Argument[-1];ReturnValue;taint",
66-
"com.google.common.base;Optional;true;of;(T);;Argument[0];ReturnValue;taint",
67-
"com.google.common.base;Optional;true;or;;;Argument[-1];ReturnValue;taint",
68-
"com.google.common.base;Optional;true;or;;;Argument[0];ReturnValue;taint",
69-
"com.google.common.base;Optional;true;orNull;();;Argument[-1];ReturnValue;taint",
70-
"com.google.common.base;Optional;true;presentInstances;;;Argument[0];ReturnValue;taint",
71-
"com.google.common.base;Optional;true;toJavaUtil;();;Argument[-1];ReturnValue;taint",
72-
"com.google.common.base;Optional;true;toJavaUtil;(Optional<T>);;Argument[0];ReturnValue;taint",
73-
"com.google.common.base;MoreObjects;false;firstNonNull;(T,T);;Argument;ReturnValue;value",
66+
"com.google.common.base;Suppliers;false;ofInstance;(Object);;Argument[0];ReturnValue;taint",
67+
"com.google.common.base;Suppliers;false;memoize;(Supplier);;Argument[0];ReturnValue;taint",
68+
"com.google.common.base;Suppliers;false;memoizeWithExpiration;(Supplier,long,TimeUnit);;Argument[0];ReturnValue;taint",
69+
"com.google.common.base;Suppliers;false;synchronizedSupplier;(Supplier);;Argument[0];ReturnValue;taint",
70+
"com.google.common.base;Optional;true;fromJavaUtil;(Optional);;Element of Argument[0];Element of ReturnValue;value",
71+
"com.google.common.base;Optional;true;fromNullable;(Object);;Argument[0];Element of ReturnValue;value",
72+
"com.google.common.base;Optional;true;get;();;Element of Argument[-1];ReturnValue;value",
73+
"com.google.common.base;Optional;true;asSet;();;Element of Argument[-1];Element of ReturnValue;value",
74+
"com.google.common.base;Optional;true;of;(Object);;Argument[0];Element of ReturnValue;value",
75+
"com.google.common.base;Optional;true;or;;;Element of Argument[-1];ReturnValue;value",
76+
"com.google.common.base;Optional;true;or;(Optional);;Element of Argument[0];ReturnValue;value",
77+
"com.google.common.base;Optional;true;or;(Supplier);;Argument[0];ReturnValue;value",
78+
"com.google.common.base;Optional;true;or;(Object);;Argument[0];ReturnValue;value",
79+
"com.google.common.base;Optional;true;orNull;();;Element of Argument[-1];ReturnValue;value",
80+
"com.google.common.base;Optional;true;presentInstances;(Iterable);;Element of Element of Argument[0];Element of ReturnValue;value",
81+
"com.google.common.base;Optional;true;toJavaUtil;();;Element of Argument[-1];Element of ReturnValue;value",
82+
"com.google.common.base;Optional;true;toJavaUtil;(Optional);;Element of Argument[0];Element of ReturnValue;value",
83+
"com.google.common.base;MoreObjects;false;firstNonNull;(Object,Object);;Argument[0..1];ReturnValue;value",
7484
"com.google.common.base;MoreObjects;false;toStringHelper;(String);;Argument[0];ReturnValue;taint",
7585
"com.google.common.base;MoreObjects$ToStringHelper;false;add;;;Argument[0];ReturnValue;taint",
7686
"com.google.common.base;MoreObjects$ToStringHelper;false;add;;;Argument[0];Argument[-1];taint",

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

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,9 @@ void test6() {
7878
}
7979

8080
void test7() {
81-
sink(MoreObjects.firstNonNull(taint(), "abc")); // $numTaintFlow=1
81+
sink(MoreObjects.firstNonNull(taint(), taint())); // $numTaintFlow=2
8282
sink(MoreObjects.firstNonNull(null, taint())); // $numTaintFlow=1
83+
sink(MoreObjects.firstNonNull(taint(), null)); // $numTaintFlow=1
8384
sink(MoreObjects.toStringHelper(taint()).add("x", 3).omitNullValues().toString()); // $numTaintFlow=1
8485
sink(MoreObjects.toStringHelper((Object) taint()).toString());
8586
sink(MoreObjects.toStringHelper("a").add("x", 3).add(taint(), 4).toString()); // $numTaintFlow=1
@@ -105,10 +106,4 @@ void test8() {
105106
sink(Optional.absent().or(taint())); // $numTaintFlow=1
106107
sink(Optional.presentInstances(Optional.of(x).asSet())); // $numTaintFlow=1
107108
}
108-
109-
void test5() {
110-
sink(MoreObjects.firstNonNull(taint(), taint())); // $numTaintFlow=2
111-
sink(MoreObjects.firstNonNull(null, taint())); // $numTaintFlow=1
112-
sink(MoreObjects.firstNonNull(taint(), null)); // $numTaintFlow=1
113-
}
114109
}

0 commit comments

Comments
 (0)