11import java
22import semmle.code.java.dataflow.FlowSources
3- import TestUtilities.InlineFlowTest
3+ import TestUtilities.InlineExpectationsTest
44
55class LocalSource extends DataFlow:: Node {
66 LocalSource ( ) {
@@ -9,28 +9,42 @@ class LocalSource extends DataFlow::Node {
99 }
1010}
1111
12- class LocalValueConf extends DefaultValueFlowConf {
12+ predicate isTestSink ( DataFlow:: Node n ) {
13+ exists ( MethodAccess ma | ma .getMethod ( ) .hasName ( "sink" ) | n .asExpr ( ) = ma .getAnArgument ( ) )
14+ }
15+
16+ class LocalValueConf extends DataFlow:: Configuration {
17+ LocalValueConf ( ) { this = "LocalValueConf" }
18+
1319 override predicate isSource ( DataFlow:: Node n ) { n instanceof LocalSource }
20+
21+ override predicate isSink ( DataFlow:: Node n ) { isTestSink ( n ) }
1422}
1523
16- class LocalTaintConf extends DefaultTaintFlowConf {
24+ class LocalTaintConf extends TaintTracking:: Configuration {
25+ LocalTaintConf ( ) { this = "LocalTaintConf" }
26+
1727 override predicate isSource ( DataFlow:: Node n ) { n instanceof LocalSource }
28+
29+ override predicate isSink ( DataFlow:: Node n ) { isTestSink ( n ) }
1830}
1931
20- class LocalFlowTest extends InlineFlowTest {
32+ class LocalFlowTest extends InlineExpectationsTest {
33+ LocalFlowTest ( ) { this = "LocalFlowTest" }
34+
2135 override string getARelevantTag ( ) { result = [ "hasLocalValueFlow" , "hasLocalTaintFlow" ] }
2236
2337 override predicate hasActualResult ( Location location , string element , string tag , string value ) {
2438 tag = "hasLocalValueFlow" and
25- exists ( DataFlow:: Node src , DataFlow:: Node sink | getValueFlowConfig ( ) .hasFlow ( src , sink ) |
39+ exists ( DataFlow:: Node src , DataFlow:: Node sink | any ( LocalValueConf c ) .hasFlow ( src , sink ) |
2640 sink .getLocation ( ) = location and
2741 element = sink .toString ( ) and
2842 value = ""
2943 )
3044 or
3145 tag = "hasLocalTaintFlow" and
3246 exists ( DataFlow:: Node src , DataFlow:: Node sink |
33- getTaintFlowConfig ( ) .hasFlow ( src , sink ) and not getValueFlowConfig ( ) .hasFlow ( src , sink )
47+ any ( LocalTaintConf c ) .hasFlow ( src , sink ) and not any ( LocalValueConf c ) .hasFlow ( src , sink )
3448 |
3549 sink .getLocation ( ) = location and
3650 element = sink .toString ( ) and
0 commit comments