File tree Expand file tree Collapse file tree 2 files changed +38
-26
lines changed
swift/ql/lib/codeql/swift/regex Expand file tree Collapse file tree 2 files changed +38
-26
lines changed Original file line number Diff line number Diff line change @@ -6,32 +6,7 @@ import swift
6
6
import codeql.swift.regex.RegexTreeView
7
7
private import codeql.swift.dataflow.DataFlow
8
8
private import internal.ParseRegex
9
-
10
- /**
11
- * A data flow configuration for tracking string literals that are used as
12
- * regular expressions.
13
- */
14
- private module RegexUseConfig implements DataFlow:: ConfigSig {
15
- predicate isSource ( DataFlow:: Node node ) { node .asExpr ( ) instanceof StringLiteralExpr }
16
-
17
- predicate isSink ( DataFlow:: Node node ) { node .asExpr ( ) = any ( RegexEval eval ) .getRegexInput ( ) }
18
-
19
- predicate isAdditionalFlowStep ( DataFlow:: Node nodeFrom , DataFlow:: Node nodeTo ) {
20
- // flow through `Regex` initializer, i.e. from a string to a `Regex` object.
21
- exists ( CallExpr call |
22
- (
23
- call .getStaticTarget ( ) .( Method ) .hasQualifiedName ( "Regex" , [ "init(_:)" , "init(_:as:)" ] ) or
24
- call .getStaticTarget ( )
25
- .( Method )
26
- .hasQualifiedName ( "NSRegularExpression" , "init(pattern:options:)" )
27
- ) and
28
- nodeFrom .asExpr ( ) = call .getArgument ( 0 ) .getExpr ( ) and
29
- nodeTo .asExpr ( ) = call
30
- )
31
- }
32
- }
33
-
34
- private module RegexUseFlow = DataFlow:: Global< RegexUseConfig > ;
9
+ private import internal.RegexTracking
35
10
36
11
/**
37
12
* A string literal that is used as a regular expression in a regular
Original file line number Diff line number Diff line change
1
+ /**
2
+ * Provides classes and predicates that track strings and regular expressions
3
+ * to where they are used, along with properties of the regex such as parse
4
+ * mode flags that have been set.
5
+ */
6
+
7
+ import swift
8
+ import codeql.swift.regex.RegexTreeView
9
+ private import codeql.swift.dataflow.DataFlow
10
+ private import ParseRegex
11
+ private import codeql.swift.regex.Regex
12
+
13
+ /**
14
+ * A data flow configuration for tracking string literals that are used as
15
+ * regular expressions.
16
+ */
17
+ private module RegexUseConfig implements DataFlow:: ConfigSig {
18
+ predicate isSource ( DataFlow:: Node node ) { node .asExpr ( ) instanceof StringLiteralExpr }
19
+
20
+ predicate isSink ( DataFlow:: Node node ) { node .asExpr ( ) = any ( RegexEval eval ) .getRegexInput ( ) }
21
+
22
+ predicate isAdditionalFlowStep ( DataFlow:: Node nodeFrom , DataFlow:: Node nodeTo ) {
23
+ // flow through `Regex` initializer, i.e. from a string to a `Regex` object.
24
+ exists ( CallExpr call |
25
+ (
26
+ call .getStaticTarget ( ) .( Method ) .hasQualifiedName ( "Regex" , [ "init(_:)" , "init(_:as:)" ] ) or
27
+ call .getStaticTarget ( )
28
+ .( Method )
29
+ .hasQualifiedName ( "NSRegularExpression" , "init(pattern:options:)" )
30
+ ) and
31
+ nodeFrom .asExpr ( ) = call .getArgument ( 0 ) .getExpr ( ) and
32
+ nodeTo .asExpr ( ) = call
33
+ )
34
+ }
35
+ }
36
+
37
+ module RegexUseFlow = DataFlow:: Global< RegexUseConfig > ;
You can’t perform that action at this time.
0 commit comments