mirror of
https://github.com/github/codeql.git
synced 2025-12-20 10:46:30 +01:00
Get rid of (get)regexMethod
This commit is contained in:
@@ -25,8 +25,6 @@ module RegexExecution {
|
|||||||
*/
|
*/
|
||||||
abstract class Range extends DataFlow::Node {
|
abstract class Range extends DataFlow::Node {
|
||||||
abstract DataFlow::Node getRegexNode();
|
abstract DataFlow::Node getRegexNode();
|
||||||
|
|
||||||
abstract DataFlow::CallCfgNode getRegexMethod();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,8 +40,6 @@ class RegexExecution extends DataFlow::Node {
|
|||||||
RegexExecution() { this = range }
|
RegexExecution() { this = range }
|
||||||
|
|
||||||
DataFlow::Node getRegexNode() { result = range.getRegexNode() }
|
DataFlow::Node getRegexNode() { result = range.getRegexNode() }
|
||||||
|
|
||||||
DataFlow::CallCfgNode getRegexMethod() { result = range.getRegexMethod() }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Provides classes for modeling Regular Expression escape-related APIs. */
|
/** Provides classes for modeling Regular Expression escape-related APIs. */
|
||||||
@@ -56,8 +52,6 @@ module RegexEscape {
|
|||||||
*/
|
*/
|
||||||
abstract class Range extends DataFlow::Node {
|
abstract class Range extends DataFlow::Node {
|
||||||
abstract DataFlow::Node getRegexNode();
|
abstract DataFlow::Node getRegexNode();
|
||||||
|
|
||||||
abstract DataFlow::CallCfgNode getEscapeMethod();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,6 +67,4 @@ class RegexEscape extends DataFlow::Node {
|
|||||||
RegexEscape() { this = range }
|
RegexEscape() { this = range }
|
||||||
|
|
||||||
DataFlow::Node getRegexNode() { result = range.getRegexNode() }
|
DataFlow::Node getRegexNode() { result = range.getRegexNode() }
|
||||||
|
|
||||||
DataFlow::CallCfgNode getEscapeMethod() { result = range.getEscapeMethod() }
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,14 +26,10 @@ private module Re {
|
|||||||
DirectRegex() {
|
DirectRegex() {
|
||||||
// this.getLocation().getFile().getBaseName().regexpMatch("^re_(good|bad)\\.py$") and // debug
|
// this.getLocation().getFile().getBaseName().regexpMatch("^re_(good|bad)\\.py$") and // debug
|
||||||
this = API::moduleImport("re").getMember(any(ReMethods m)).getACall() and
|
this = API::moduleImport("re").getMember(any(ReMethods m)).getACall() and
|
||||||
regexNode = this.getArg(0) and
|
regexNode = this.getArg(0)
|
||||||
regexMethod = this
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override DataFlow::Node getRegexNode() { result = regexNode }
|
override DataFlow::Node getRegexNode() { result = regexNode }
|
||||||
|
|
||||||
// pending obj.this discussion
|
|
||||||
override DataFlow::CallCfgNode getRegexMethod() { result = regexMethod }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class CompiledRegex extends DataFlow::CallCfgNode, RegexExecution::Range {
|
private class CompiledRegex extends DataFlow::CallCfgNode, RegexExecution::Range {
|
||||||
@@ -47,14 +43,11 @@ private module Re {
|
|||||||
patternCall = API::moduleImport("re").getMember("compile").getACall() and
|
patternCall = API::moduleImport("re").getMember("compile").getACall() and
|
||||||
patternCall = reMethod.getObject().getALocalSource() and
|
patternCall = reMethod.getObject().getALocalSource() and
|
||||||
reMethod.getAttributeName() instanceof ReMethods and
|
reMethod.getAttributeName() instanceof ReMethods and
|
||||||
regexNode = patternCall.getArg(0) and
|
regexNode = patternCall.getArg(0)
|
||||||
regexMethod = this
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override DataFlow::Node getRegexNode() { result = regexNode }
|
override DataFlow::Node getRegexNode() { result = regexNode }
|
||||||
|
|
||||||
override DataFlow::CallCfgNode getRegexMethod() { result = regexMethod }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class ReEscape extends DataFlow::CallCfgNode, RegexEscape::Range {
|
class ReEscape extends DataFlow::CallCfgNode, RegexEscape::Range {
|
||||||
@@ -63,12 +56,9 @@ private module Re {
|
|||||||
|
|
||||||
ReEscape() {
|
ReEscape() {
|
||||||
this = API::moduleImport("re").getMember("escape").getACall() and
|
this = API::moduleImport("re").getMember("escape").getACall() and
|
||||||
regexNode = this.getArg(0) and
|
regexNode = this.getArg(0)
|
||||||
escapeMethod = this
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override DataFlow::Node getRegexNode() { result = regexNode }
|
override DataFlow::Node getRegexNode() { result = regexNode }
|
||||||
|
|
||||||
override DataFlow::CallCfgNode getEscapeMethod() { result = escapeMethod }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ class RegexInjectionSink extends DataFlow::Node {
|
|||||||
RegexInjectionSink() {
|
RegexInjectionSink() {
|
||||||
exists(RegexExecution reExec |
|
exists(RegexExecution reExec |
|
||||||
this = reExec.getRegexNode() and
|
this = reExec.getRegexNode() and
|
||||||
regexMethod = reExec.getRegexMethod().getFunction().asExpr().(Attribute)
|
regexMethod = reExec.asExpr().(Attribute)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user