mirror of
https://github.com/github/codeql.git
synced 2026-04-28 02:05:14 +02:00
Merge pull request #3897 from aibaars/util-objects
Java: data flow for `java.util.Objects`
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
import java.util.Objects;
|
||||
|
||||
class ObjectsTest {
|
||||
public static void valueSteps() {
|
||||
sink(Objects.requireNonNull(source()));
|
||||
sink(Objects.requireNonNull(source(), "message"));
|
||||
sink(Objects.requireNonNull(source(), () -> "value1"));
|
||||
sink(Objects.requireNonNullElse(source(), source()));
|
||||
sink(Objects.requireNonNullElseGet(source(), () -> "value2"));
|
||||
sink(Objects.toString(null, source()));
|
||||
}
|
||||
private static <T> T source() { return null; }
|
||||
private static void sink(Object o) {}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
| ObjectsTest.java:5:31:5:38 | source(...) | ObjectsTest.java:5:8:5:39 | requireNonNull(...) |
|
||||
| ObjectsTest.java:6:31:6:38 | source(...) | ObjectsTest.java:6:8:6:50 | requireNonNull(...) |
|
||||
| ObjectsTest.java:7:31:7:38 | source(...) | ObjectsTest.java:7:8:7:55 | requireNonNull(...) |
|
||||
| ObjectsTest.java:8:35:8:42 | source(...) | ObjectsTest.java:8:8:8:53 | requireNonNullElse(...) |
|
||||
| ObjectsTest.java:8:45:8:52 | source(...) | ObjectsTest.java:8:8:8:53 | requireNonNullElse(...) |
|
||||
| ObjectsTest.java:9:38:9:45 | source(...) | ObjectsTest.java:9:8:9:62 | requireNonNullElseGet(...) |
|
||||
| ObjectsTest.java:10:31:10:38 | source(...) | ObjectsTest.java:10:8:10:39 | toString(...) |
|
||||
21
java/ql/test/library-tests/dataflow/local-flow/flow.ql
Normal file
21
java/ql/test/library-tests/dataflow/local-flow/flow.ql
Normal file
@@ -0,0 +1,21 @@
|
||||
import java
|
||||
import semmle.code.java.dataflow.DataFlow
|
||||
|
||||
class Conf extends DataFlow::Configuration {
|
||||
Conf() { this = "conf" }
|
||||
|
||||
override predicate isSource(DataFlow::Node src) {
|
||||
src.asExpr().(MethodAccess).getMethod().hasName("source")
|
||||
}
|
||||
|
||||
override predicate isSink(DataFlow::Node sink) {
|
||||
exists(MethodAccess ma |
|
||||
sink.asExpr() = ma.getAnArgument() and
|
||||
ma.getMethod().hasName("sink")
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
from Conf c, DataFlow::Node src, DataFlow::Node sink
|
||||
where c.hasFlow(src, sink)
|
||||
select src, sink
|
||||
1
java/ql/test/library-tests/dataflow/local-flow/options
Normal file
1
java/ql/test/library-tests/dataflow/local-flow/options
Normal file
@@ -0,0 +1 @@
|
||||
//semmle-extractor-options: --javac-args -source 14 -target 14
|
||||
Reference in New Issue
Block a user