@@ -42,11 +42,17 @@ import codeql.swift.dataflow.TaintTracking
4242import TestUtilities.InlineExpectationsTest
4343
4444private predicate defaultSource ( DataFlow:: Node source ) {
45- source .asExpr ( ) .( CallExpr ) .getStaticTarget ( ) .( Function ) .getShortName ( ) = [ "source" , "taint" ]
45+ source
46+ .asExpr ( )
47+ .( CallExpr )
48+ .getStaticTarget ( )
49+ .( Function )
50+ .getShortName ( )
51+ .matches ( [ "source%" , "taint" ] )
4652}
4753
4854private predicate defaultSink ( DataFlow:: Node sink ) {
49- exists ( CallExpr ca | ca .getStaticTarget ( ) .( Function ) .getShortName ( ) = "sink" |
55+ exists ( CallExpr ca | ca .getStaticTarget ( ) .( Function ) .getShortName ( ) . matches ( "sink%" ) |
5056 sink .asExpr ( ) = ca .getAnArgument ( ) .getExpr ( )
5157 )
5258}
@@ -59,34 +65,50 @@ module DefaultFlowConfig implements DataFlow::ConfigSig {
5965 int fieldFlowBranchLimit ( ) { result = 1000 }
6066}
6167
62- private module NoFlowConfig implements DataFlow:: ConfigSig {
68+ module NoFlowConfig implements DataFlow:: ConfigSig {
6369 predicate isSource ( DataFlow:: Node source ) { none ( ) }
6470
6571 predicate isSink ( DataFlow:: Node sink ) { none ( ) }
6672}
6773
74+ private signature string valueFlowTagSig ( ) ;
75+
76+ private signature string taintFlowTagSig ( ) ;
77+
78+ string defaultValueFlowTag ( ) { result = "hasValueFlow" }
79+
80+ string defaultTaintFlowTag ( ) { result = "hasTaintFlow" }
81+
6882private string getSourceArgString ( DataFlow:: Node src ) {
6983 defaultSource ( src ) and
70- src .asExpr ( ) .( CallExpr ) .getAnArgument ( ) .getExpr ( ) .( StringLiteralExpr ) .getValue ( ) = result
84+ (
85+ src .asExpr ( ) .( CallExpr ) .getAnArgument ( ) .getExpr ( ) .( StringLiteralExpr ) .getValue ( ) = result
86+ or
87+ not src .asExpr ( ) .( CallExpr ) .getAnArgument ( ) .getExpr ( ) instanceof StringLiteralExpr and
88+ result = src .getLocation ( ) .getStartLine ( ) .toString ( )
89+ )
7190}
7291
73- module FlowTest< DataFlow:: ConfigSig ValueFlowConfig, DataFlow:: ConfigSig TaintFlowConfig> {
92+ module FlowTest<
93+ DataFlow:: ConfigSig ValueFlowConfig, DataFlow:: ConfigSig TaintFlowConfig,
94+ valueFlowTagSig / 0 valueFlowTag, taintFlowTagSig / 0 taintFlowTag>
95+ {
7496 module ValueFlow = DataFlow:: Global< ValueFlowConfig > ;
7597
7698 module TaintFlow = TaintTracking:: Global< TaintFlowConfig > ;
7799
78100 private module InlineTest implements TestSig {
79- string getARelevantTag ( ) { result = [ "hasValueFlow" , "hasTaintFlow" ] }
101+ string getARelevantTag ( ) { result = [ valueFlowTag ( ) , taintFlowTag ( ) ] }
80102
81103 predicate hasActualResult ( Location location , string element , string tag , string value ) {
82- tag = "hasValueFlow" and
104+ tag = valueFlowTag ( ) and
83105 exists ( DataFlow:: Node src , DataFlow:: Node sink | ValueFlow:: flow ( src , sink ) |
84106 sink .getLocation ( ) = location and
85107 element = sink .toString ( ) and
86108 if exists ( getSourceArgString ( src ) ) then value = getSourceArgString ( src ) else value = ""
87109 )
88110 or
89- tag = "hasTaintFlow" and
111+ tag = taintFlowTag ( ) and
90112 exists ( DataFlow:: Node src , DataFlow:: Node sink |
91113 TaintFlow:: flow ( src , sink ) and not ValueFlow:: flow ( src , sink )
92114 |
@@ -106,12 +128,13 @@ module FlowTest<DataFlow::ConfigSig ValueFlowConfig, DataFlow::ConfigSig TaintFl
106128 }
107129}
108130
109- module DefaultFlowTest = FlowTest< DefaultFlowConfig , DefaultFlowConfig > ;
131+ module DefaultFlowTest =
132+ FlowTest< DefaultFlowConfig , DefaultFlowConfig , defaultValueFlowTag / 0 , defaultTaintFlowTag / 0 > ;
110133
111134module ValueFlowTest< DataFlow:: ConfigSig ValueFlowConfig> {
112- import FlowTest< ValueFlowConfig , NoFlowConfig >
135+ import FlowTest< ValueFlowConfig , NoFlowConfig , defaultValueFlowTag / 0 , defaultTaintFlowTag / 0 >
113136}
114137
115138module TaintFlowTest< DataFlow:: ConfigSig TaintFlowConfig> {
116- import FlowTest< NoFlowConfig , TaintFlowConfig >
139+ import FlowTest< NoFlowConfig , TaintFlowConfig , defaultValueFlowTag / 0 , defaultTaintFlowTag / 0 >
117140}
0 commit comments