Merge pull request #3897 from aibaars/util-objects

Java: data flow for `java.util.Objects`
This commit is contained in:
Anders Schack-Mulligen
2020-07-08 15:07:50 +02:00
committed by GitHub
5 changed files with 56 additions and 0 deletions

View File

@@ -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) {}
}

View File

@@ -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(...) |

View 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

View File

@@ -0,0 +1 @@
//semmle-extractor-options: --javac-args -source 14 -target 14