Skip to content

Commit a8efb92

Browse files
committed
Simple Test
1 parent d99f552 commit a8efb92

File tree

6 files changed

+73
-22
lines changed

6 files changed

+73
-22
lines changed

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

Lines changed: 0 additions & 21 deletions
This file was deleted.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import javax.servlet.http.HttpServletRequest;
2+
import javax.servlet.http.HttpServletResponse;
3+
import javax.servlet.http.Part;
4+
5+
public class App {
6+
7+
private HttpServletRequest request;
8+
private HttpServletResponse response;
9+
private Part filePart;
10+
11+
private static void sink(Object o) {}
12+
13+
public void test() throws Exception {
14+
sink(filePart.getContentType()); // $hasRemoteValueFlow
15+
sink(filePart.getHeader("test")); // $hasRemoteValueFlow
16+
sink(filePart.getInputStream()); // $hasRemoteValueFlow
17+
sink(filePart.getHeaders("test")); // $hasRemoteValueFlow
18+
//sink(filePart.getHeaderNames()); // $hasRemoteValueFlow
19+
sink(filePart.getSubmittedFileName()); // $hasRemoteValueFlow
20+
sink(filePart.getName()); // $hasRemoteValueFlow
21+
}
22+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/test
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 RemoteValueConfig implements DataFlow::ConfigSig {
10+
predicate isSource(DataFlow::Node n) { n instanceof RemoteFlowSource }
11+
12+
predicate isSink(DataFlow::Node n) { isTestSink(n) }
13+
}
14+
15+
module RemoteValueFlow = DataFlow::Global<RemoteValueConfig>;
16+
17+
module RemoteTaintConfig implements DataFlow::ConfigSig {
18+
predicate isSource(DataFlow::Node n) { n instanceof RemoteFlowSource }
19+
20+
predicate isSink(DataFlow::Node n) { isTestSink(n) }
21+
}
22+
23+
module RemoteTaintFlow = TaintTracking::Global<RemoteTaintConfig>;
24+
25+
module RemoteFlowTest implements TestSig {
26+
string getARelevantTag() { result = ["hasRemoteValueFlow", "hasRemoteTaintFlow"] }
27+
28+
predicate hasActualResult(Location location, string element, string tag, string value) {
29+
tag = "hasRemoteValueFlow" and
30+
exists(DataFlow::Node sink | RemoteValueFlow::flowTo(sink) |
31+
sink.getLocation() = location and
32+
element = sink.toString() and
33+
value = ""
34+
)
35+
or
36+
tag = "hasRemoteTaintFlow" and
37+
exists(DataFlow::Node src, DataFlow::Node sink |
38+
RemoteTaintFlow::flow(src, sink) and not RemoteValueFlow::flow(src, sink)
39+
|
40+
sink.getLocation() = location and
41+
element = sink.toString() and
42+
value = ""
43+
)
44+
}
45+
}
46+
47+
import MakeTest<RemoteFlowTest>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/servlet-api-2.4:${testdir}/../../../stubs/springframework-5.3.8:${testdir}/../../../stubs/google-android-9.0.0:${testdir}/../../../stubs/playframework-2.6.x:${testdir}/../../../stubs/jackson-databind-2.12:${testdir}/../../../stubs/jackson-core-2.12:${testdir}/../../../stubs/akka-2.6.x:${testdir}/../../../stubs/jwtk-jjwt-0.11.2:${testdir}/../../../stubs/jenkins:${testdir}/../../../stubs/stapler-1.263:${testdir}/../../../stubs/test
1+
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/servlet-api-2.4:${testdir}/../../../stubs/springframework-5.3.8:${testdir}/../../../stubs/google-android-9.0.0:${testdir}/../../../stubs/playframework-2.6.x:${testdir}/../../../stubs/jackson-databind-2.12:${testdir}/../../../stubs/jackson-core-2.12:${testdir}/../../../stubs/akka-2.6.x:${testdir}/../../../stubs/jwtk-jjwt-0.11.2:${testdir}/../../../stubs/jenkins:${testdir}/../../../stubs/stapler-1.263

0 commit comments

Comments
 (0)