7
7
8
8
import regexp.RegExpTreeView // re-export
9
9
private import regexp.internal.ParseRegExp
10
- private import codeql.ruby.ast.Literal as AST
10
+ private import regexp.internal.RegExpConfiguration
11
+ private import codeql.ruby.ast.Literal as Ast
11
12
private import codeql.ruby.DataFlow
12
- private import codeql.ruby.controlflow.CfgNodes
13
13
private import codeql.ruby.ApiGraphs
14
- private import codeql.ruby.dataflow.internal.tainttrackingforlibraries.TaintTrackingImpl
15
14
16
15
/**
17
16
* Provides utility predicates related to regular expressions.
@@ -47,7 +46,7 @@ abstract class RegExpPatternSource extends DataFlow::Node {
47
46
* A regular expression literal, viewed as the pattern source for itself.
48
47
*/
49
48
private class RegExpLiteralPatternSource extends RegExpPatternSource {
50
- private AST :: RegExpLiteral astNode ;
49
+ private Ast :: RegExpLiteral astNode ;
51
50
52
51
RegExpLiteralPatternSource ( ) { astNode = this .asExpr ( ) .getExpr ( ) }
53
52
@@ -70,7 +69,7 @@ private class StringRegExpPatternSource extends RegExpPatternSource {
70
69
override RegExpTerm getRegExpTerm ( ) { result .getRegExp ( ) = this .asExpr ( ) .getExpr ( ) }
71
70
}
72
71
73
- private class RegExpLiteralRegExp extends RegExp , AST :: RegExpLiteral {
72
+ private class RegExpLiteralRegExp extends RegExp , Ast :: RegExpLiteral {
74
73
override predicate isDotAll ( ) { this .hasMultilineFlag ( ) }
75
74
76
75
override predicate isIgnoreCase ( ) { this .hasCaseInsensitiveFlag ( ) }
@@ -115,32 +114,7 @@ class StdLibRegExpInterpretation extends RegExpInterpretation::Range {
115
114
mce .getMethodName ( ) = [ "match" , "match?" ] and
116
115
this = mce .getArgument ( 0 ) and
117
116
// exclude https://ruby-doc.org/core-2.4.0/Regexp.html#method-i-match
118
- not mce .getReceiver ( ) .asExpr ( ) .getExpr ( ) instanceof AST:: RegExpLiteral
119
- )
120
- }
121
- }
122
-
123
- private class RegExpConfiguration extends Configuration {
124
- RegExpConfiguration ( ) { this = "RegExpConfiguration" }
125
-
126
- override predicate isSource ( DataFlow:: Node source ) {
127
- source .asExpr ( ) =
128
- any ( ExprCfgNode e |
129
- e .getConstantValue ( ) .isString ( _) and
130
- not e instanceof ExprNodes:: VariableReadAccessCfgNode and
131
- not e instanceof ExprNodes:: ConstantReadAccessCfgNode
132
- )
133
- }
134
-
135
- override predicate isSink ( DataFlow:: Node sink ) { sink instanceof RegExpInterpretation:: Range }
136
-
137
- override predicate isSanitizer ( DataFlow:: Node node ) {
138
- // stop flow if `node` is receiver of
139
- // https://ruby-doc.org/core-2.4.0/String.html#method-i-match
140
- exists ( DataFlow:: CallNode mce |
141
- mce .getMethodName ( ) = [ "match" , "match?" ] and
142
- node = mce .getReceiver ( ) and
143
- mce .getArgument ( 0 ) .asExpr ( ) .getExpr ( ) instanceof AST:: RegExpLiteral
117
+ not mce .getReceiver ( ) .asExpr ( ) .getExpr ( ) instanceof Ast:: RegExpLiteral
144
118
)
145
119
}
146
120
}
0 commit comments