Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0f20eeb

Browse files
jorgectfyoff
andcommitted
Apply suggestions
Co-authored-by: yoff <[email protected]>
1 parent b27b77c commit 0f20eeb

3 files changed

Lines changed: 20 additions & 10 deletions

File tree

python/ql/src/semmle/python/Concepts.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -666,7 +666,7 @@ module RegexExecution {
666666
}
667667

668668
class RegexExecution extends DataFlow::Node {
669-
override RegexExecution::Range range;
669+
RegexExecution::Range range;
670670

671671
RegexExecution() { this = range }
672672

python/ql/src/semmle/python/frameworks/Stdlib.qll

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -875,25 +875,32 @@ private module Stdlib {
875875
}
876876

877877
/** re.ReMethod(pattern, string) */
878-
private class DirectRegex extends RegexExecution::Range {
878+
private class DirectRegex extends DataFlow::CallCfgNode, RegexExecution::Range {
879+
DataFlow::Node regexNode;
880+
879881
DirectRegex() {
880-
exists(ReMethods reMethod, DataFlow::CallCfgNode reCall |
881-
reCall = API::moduleImport("re").getMember(reMethod).getACall() and
882-
this = reCall.getArg(0)
883-
)
882+
this = API::moduleImport("re").getMember(any(ReMethods m)).getACall() and
883+
regexNode = this.getArg(0)
884884
}
885+
886+
override DataFlow::Node getRegexNode() { result = regexNode }
885887
}
886888

887889
/** re.compile(pattern).ReMethod */
888-
private class CompiledRegex extends RegexExecution::Range {
890+
private class CompiledRegex extends DataFlow::CallCfgNode, RegexExecution::Range {
891+
DataFlow::Node regexNode;
892+
889893
CompiledRegex() {
890894
exists(DataFlow::CallCfgNode patternCall, DataFlow::AttrRead reMethod |
895+
this.getFunction() = reMethod and
891896
patternCall = API::moduleImport("re").getMember("compile").getACall() and
892897
patternCall = reMethod.getObject().getALocalSource() and
893898
reMethod.getAttributeName() instanceof ReMethods and
894-
this = patternCall.getArg(0)
899+
regexNode = patternCall.getArg(0)
895900
)
896901
}
902+
903+
override DataFlow::Node getRegexNode() { result = regexNode }
897904
}
898905

899906
private class RegexEscape extends DataFlow::Node {

python/ql/src/semmle/python/security/dataflow/RegexInjection.qll

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ class RegexInjectionFlowConfig extends TaintTracking::Configuration {
1717

1818
override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }
1919

20-
override predicate isSink(DataFlow::Node sink) { sink instanceof RegexExecution }
20+
override predicate isSink(DataFlow::Node sink) { sink = any(RegexExecution re).getRegexNode() }
2121

22-
override predicate isSanitizer(DataFlow::Node sanitizer) { sanitizer instanceof RegexEscape }
22+
override predicate isSanitizer(DataFlow::Node sanitizer) {
23+
sanitizer =
24+
API::moduleImport("re").getMember("escape").getACall().(DataFlow::CallCfgNode).getArg(0)
25+
}
2326
}

0 commit comments

Comments
 (0)