Get rid of (get)regexMethod

This commit is contained in:
jorgectf
2021-03-27 00:36:00 +01:00
parent 18ce257fc8
commit e78e2ac266
3 changed files with 4 additions and 22 deletions

View File

@@ -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() }
} }

View File

@@ -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 }
} }
} }

View File

@@ -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)
) )
} }