Skip to content

Commit cc45db7

Browse files
authored
Merge pull request #13394 from atorralba/atorralba/java/fix-gson-jsonarray-models
Java: Fix Gson's JsonArray.add models
2 parents 76a8e98 + c013567 commit cc45db7

File tree

2 files changed

+24
-12
lines changed

2 files changed

+24
-12
lines changed

java/ql/lib/ext/com.google.gson.model.yml

+6-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,12 @@ extensions:
2626
- ["com.google.gson", "JsonElement", True, "getAsJsonPrimitive", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"]
2727
- ["com.google.gson", "JsonElement", True, "getAsString", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"]
2828
- ["com.google.gson", "JsonElement", True, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"]
29-
- ["com.google.gson", "JsonArray", True, "add", "", "", "Argument[0]", "Argument[this].Element", "value", "manual"]
29+
- ["com.google.gson", "JsonArray", True, "add", "(Boolean)", "", "Argument[0]", "Argument[this].Element", "taint", "manual"]
30+
- ["com.google.gson", "JsonArray", True, "add", "(Character)", "", "Argument[0]", "Argument[this].Element", "taint", "manual"]
31+
- ["com.google.gson", "JsonArray", True, "add", "(JsonElement)", "", "Argument[0]", "Argument[this].Element", "value", "manual"]
32+
- ["com.google.gson", "JsonArray", True, "add", "(Number)", "", "Argument[0]", "Argument[this].Element", "taint", "manual"]
33+
- ["com.google.gson", "JsonArray", True, "add", "(String)", "", "Argument[0]", "Argument[this].Element", "taint", "manual"]
34+
- ["com.google.gson", "JsonArray", True, "addAll", "(JsonArray)", "", "Argument[0].Element", "Argument[this].Element", "value", "manual"]
3035
- ["com.google.gson", "JsonArray", True, "asList", "", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"]
3136
- ["com.google.gson", "JsonArray", True, "get", "", "", "Argument[this].Element", "ReturnValue", "value", "manual"]
3237
- ["com.google.gson", "JsonArray", True, "set", "", "", "Argument[1]", "Argument[this].Element", "value", "manual"]

java/ql/test/library-tests/frameworks/gson/Test.java

+18-11
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public class Test {
2525
<K> K getMapKeyDefault(Map.Entry<K,?> container) { return container.getKey(); }
2626
JsonElement getMapValueDefault(JsonObject container) { return container.get(null); }
2727
<V> V getMapValueDefault(Map.Entry<?,V> container) { return container.getValue(); }
28-
JsonArray newWithElementDefault(String element) { JsonArray a = new JsonArray(); a.add(element); return a; }
28+
JsonArray newWithElementDefault(JsonElement element) { JsonArray a = new JsonArray(); a.add(element); return a; }
2929
JsonObject newWithMapKeyDefault(String key) { JsonObject o = new JsonObject(); o.add(key, (JsonElement) null); return o; }
3030
JsonObject newWithMapValueDefault(JsonElement element) { JsonObject o = new JsonObject(); o.add(null, element); return o; }
3131
Object source() { return null; }
@@ -232,51 +232,58 @@ public void test() throws Exception {
232232
sink(out); // $ hasTaintFlow
233233
}
234234
{
235-
// "com.google.gson;JsonArray;true;add;;;Argument[0];Argument[this].Element;value;manual"
235+
// "com.google.gson;JsonArray;true;add;(Boolean);;Argument[0];Argument[this].Element;taint;manual"
236236
JsonArray out = null;
237237
Boolean in = (Boolean)source();
238238
out.add(in);
239-
sink(getElement(out)); // $ hasValueFlow
239+
sink(getElement(out)); // $ hasTaintFlow
240240
}
241241
{
242-
// "com.google.gson;JsonArray;true;add;;;Argument[0];Argument[this].Element;value;manual"
242+
// "com.google.gson;JsonArray;true;add;(Character);;Argument[0];Argument[this].Element;taint;manual"
243243
JsonArray out = null;
244244
Character in = (Character)source();
245245
out.add(in);
246-
sink(getElement(out)); // $ hasValueFlow
246+
sink(getElement(out)); // $ hasTaintFlow
247247
}
248248
{
249-
// "com.google.gson;JsonArray;true;add;;;Argument[0];Argument[this].Element;value;manual"
249+
// "com.google.gson;JsonArray;true;add;(JsonElement);;Argument[0];Argument[this].Element;value;manual"
250250
JsonArray out = null;
251251
JsonElement in = (JsonElement)source();
252252
out.add(in);
253253
sink(getElement(out)); // $ hasValueFlow
254254
}
255255
{
256-
// "com.google.gson;JsonArray;true;add;;;Argument[0];Argument[this].Element;value;manual"
256+
// "com.google.gson;JsonArray;true;add;(Number);;Argument[0];Argument[this].Element;taint;manual"
257257
JsonArray out = null;
258258
Number in = (Number)source();
259259
out.add(in);
260-
sink(getElement(out)); // $ hasValueFlow
260+
sink(getElement(out)); // $ hasTaintFlow
261261
}
262262
{
263-
// "com.google.gson;JsonArray;true;add;;;Argument[0];Argument[this].Element;value;manual"
263+
// "com.google.gson;JsonArray;true;add;(String);;Argument[0];Argument[this].Element;taint;manual"
264264
JsonArray out = null;
265265
String in = (String)source();
266266
out.add(in);
267+
sink(getElement(out)); // $ hasTaintFlow
268+
}
269+
{
270+
// "com.google.gson;JsonArray;true;addAll;(JsonArray);;Argument[0].Element;Argument[this].Element;value;manual"
271+
JsonArray out = null;
272+
JsonArray in = newWithElementDefault((JsonElement) source());
273+
out.addAll(in);
267274
sink(getElement(out)); // $ hasValueFlow
268275
}
269276
{
270277
// "com.google.gson;JsonArray;true;asList;;;Argument[this].Element;ReturnValue.Element;value;manual"
271278
List out = null;
272-
JsonArray in = (JsonArray)newWithElementDefault((String) source());
279+
JsonArray in = newWithElementDefault((JsonElement) source());
273280
out = in.asList();
274281
sink(getElement(out)); // $ hasValueFlow
275282
}
276283
{
277284
// "com.google.gson;JsonArray;true;get;;;Argument[this].Element;ReturnValue;value;manual"
278285
JsonElement out = null;
279-
JsonArray in = (JsonArray)newWithElementDefault((String) source());
286+
JsonArray in = newWithElementDefault((JsonElement) source());
280287
out = in.get(0);
281288
sink(out); // $ hasValueFlow
282289
}

0 commit comments

Comments
 (0)