Skip to content

Commit 8788672

Browse files
committed
Fix taintsources test
1 parent 91db2b6 commit 8788672

File tree

4 files changed

+52
-7
lines changed

4 files changed

+52
-7
lines changed

java/ql/test/library-tests/dataflow/taintsources/A.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public void test(ResultSet rs) throws SQLException {
4343
};
4444
sink(new URL("test").openConnection().getInputStream()); // $hasRemoteValueFlow
4545
sink(new Socket("test", 1234).getInputStream()); // $hasRemoteValueFlow
46-
sink(InetAddress.getByName("test").getHostName()); // $hasRemoteValueFlow
46+
sink(InetAddress.getByName("test").getHostName()); // $hasReverseDnsValueFlow
4747

4848
sink(System.in); // $hasLocalValueFlow
4949
sink(new FileInputStream("test")); // $hasLocalValueFlow

java/ql/test/library-tests/dataflow/taintsources/local.ql

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,20 @@ import java
22
import semmle.code.java.dataflow.FlowSources
33
import TestUtilities.InlineExpectationsTest
44

5-
class LocalSource extends DataFlow::Node instanceof UserInput {
6-
LocalSource() { not this instanceof RemoteFlowSource }
7-
}
8-
95
predicate isTestSink(DataFlow::Node n) {
106
exists(MethodCall ma | ma.getMethod().hasName("sink") | n.asExpr() = ma.getAnArgument())
117
}
128

139
module LocalValueConfig implements DataFlow::ConfigSig {
14-
predicate isSource(DataFlow::Node n) { n instanceof LocalSource }
10+
predicate isSource(DataFlow::Node n) { n instanceof LocalUserInput }
1511

1612
predicate isSink(DataFlow::Node n) { isTestSink(n) }
1713
}
1814

1915
module LocalValueFlow = DataFlow::Global<LocalValueConfig>;
2016

2117
module LocalTaintConfig implements DataFlow::ConfigSig {
22-
predicate isSource(DataFlow::Node n) { n instanceof LocalSource }
18+
predicate isSource(DataFlow::Node n) { n instanceof LocalUserInput }
2319

2420
predicate isSink(DataFlow::Node n) { isTestSink(n) }
2521
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
failures
2+
testFailures
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import java
2+
import semmle.code.java.dataflow.FlowSources
3+
import TestUtilities.InlineExpectationsTest
4+
5+
predicate isTestSink(DataFlow::Node n) {
6+
exists(MethodCall ma | ma.getMethod().hasName("sink") | n.asExpr() = ma.getAnArgument())
7+
}
8+
9+
module ReverseDnsValueConfig implements DataFlow::ConfigSig {
10+
predicate isSource(DataFlow::Node n) { n instanceof ReverseDnsUserInput }
11+
12+
predicate isSink(DataFlow::Node n) { isTestSink(n) }
13+
}
14+
15+
module ReverseDnsValueFlow = DataFlow::Global<ReverseDnsValueConfig>;
16+
17+
module ReverseDnsTaintConfig implements DataFlow::ConfigSig {
18+
predicate isSource(DataFlow::Node n) { n instanceof ReverseDnsUserInput }
19+
20+
predicate isSink(DataFlow::Node n) { isTestSink(n) }
21+
}
22+
23+
module ReverseDnsTaintFlow = TaintTracking::Global<ReverseDnsTaintConfig>;
24+
25+
module ReverseDnsFlowTest implements TestSig {
26+
string getARelevantTag() { result = ["hasReverseDnsValueFlow", "hasReverseDnsTaintFlow"] }
27+
28+
predicate hasActualResult(Location location, string element, string tag, string value) {
29+
tag = "hasReverseDnsValueFlow" and
30+
exists(DataFlow::Node sink | ReverseDnsValueFlow::flowTo(sink) |
31+
sink.getLocation() = location and
32+
element = sink.toString() and
33+
value = ""
34+
)
35+
or
36+
tag = "hasReverseDnsTaintFlow" and
37+
exists(DataFlow::Node src, DataFlow::Node sink |
38+
ReverseDnsTaintFlow::flow(src, sink) and not ReverseDnsValueFlow::flow(src, sink)
39+
|
40+
sink.getLocation() = location and
41+
element = sink.toString() and
42+
value = ""
43+
)
44+
}
45+
}
46+
47+
import MakeTest<ReverseDnsFlowTest>

0 commit comments

Comments
 (0)