Skip to content

Commit 0604a85

Browse files
committed
Java: Add WithoutElement model for List.clear and add appropriate test.
1 parent 21ec83a commit 0604a85

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

java/ql/lib/ext/java.util.model.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ extensions:
159159
- ["java.util", "List", True, "set", "(int,Object)", "", "Argument[this].Element", "ReturnValue", "value", "manual"]
160160
- ["java.util", "List", True, "set", "(int,Object)", "", "Argument[1]", "Argument[this].Element", "value", "manual"]
161161
- ["java.util", "List", True, "subList", "", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"]
162+
- ["java.util", "List", True, "clear", "()", "", "Argument[this].WithoutElement", "Argument[this]", "value", "manual"]
162163
- ["java.util", "ListIterator", True, "add", "(Object)", "", "Argument[0]", "Argument[this].Element", "value", "manual"]
163164
- ["java.util", "ListIterator", True, "previous", "", "", "Argument[this].Element", "ReturnValue", "value", "manual"]
164165
- ["java.util", "ListIterator", True, "set", "(Object)", "", "Argument[0]", "Argument[this].Element", "value", "manual"]
@@ -424,7 +425,6 @@ extensions:
424425
# When `WithoutElement` is implemented, these should be changed to summary models of the form `Argument[this].WithoutElement -> Argument[this]`.
425426
- ["java.util", "Collection", "removeIf", "(Predicate)", "summary", "manual"]
426427
- ["java.util", "Iterator", "remove", "()", "summary", "manual"]
427-
- ["java.util", "List", "clear", "()", "summary", "manual"]
428428
- ["java.util", "List", "remove", "(Object)", "summary", "manual"]
429429
- ["java.util", "Map", "clear", "()", "summary", "manual"]
430430
- ["java.util", "Set", "clear", "()", "summary", "manual"]

java/ql/test/library-tests/dataflow/collections/B.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,16 @@ void foo() throws InterruptedException {
302302
List out = null;
303303
Collection in = storeElementList(source()); out.addAll(0,in); sink(readElement(out)); // $ hasValueFlow
304304
}
305+
{
306+
// "java.util;List;true;clear;;;Argument[this].WithoutElement;Argument[this];value;manual"
307+
List out = null;
308+
List in = storeElementList(source()); out = in; out.clear(); sink(readElement(out)); // No flow
309+
}
310+
{
311+
// "java.util;List;true;clear;;;Argument[this].WithoutElement;Argument[this];value;manual"
312+
List out = null;
313+
List in = (List)source(); out = in; out.clear(); sink(out); // $ hasValueFlow
314+
}
305315
{
306316
// "java.util;Vector;true;elementAt;(int);;Element of Argument[this];ReturnValue;value;manual",
307317
Object out = null;

0 commit comments

Comments
 (0)