@@ -2842,26 +2842,15 @@ private module StdlibPrivate {
2842
2842
override string getName ( ) { result = "re." + method }
2843
2843
}
2844
2844
2845
- /** Helper module for tracking compiled regexes. */
2846
- private module CompiledRegexes {
2847
- private DataFlow:: TypeTrackingNode compiledRegex ( DataFlow:: TypeTracker t , DataFlow:: Node regex ) {
2848
- t .start ( ) and
2849
- result = API:: moduleImport ( "re" ) .getMember ( "compile" ) .getACall ( ) and
2850
- regex in [
2851
- result .( DataFlow:: CallCfgNode ) .getArg ( 0 ) ,
2852
- result .( DataFlow:: CallCfgNode ) .getArgByName ( "pattern" )
2853
- ]
2854
- or
2855
- exists ( DataFlow:: TypeTracker t2 | result = compiledRegex ( t2 , regex ) .track ( t2 , t ) )
2856
- }
2857
-
2858
- DataFlow:: Node compiledRegex ( DataFlow:: Node regex ) {
2859
- compiledRegex ( DataFlow:: TypeTracker:: end ( ) , regex ) .flowsTo ( result )
2860
- }
2845
+ API:: Node compiledRegex ( API:: Node regex ) {
2846
+ exists ( API:: CallNode compilation |
2847
+ compilation = API:: moduleImport ( "re" ) .getMember ( "compile" ) .getACall ( )
2848
+ |
2849
+ result = compilation .getReturn ( ) and
2850
+ regex = compilation .getParameter ( 0 , "pattern" )
2851
+ )
2861
2852
}
2862
2853
2863
- private import CompiledRegexes
2864
-
2865
2854
/**
2866
2855
* A call on compiled regular expression (obtained via `re.compile`) executing a
2867
2856
* regular expression.
@@ -2886,7 +2875,11 @@ private module StdlibPrivate {
2886
2875
DataFlow:: Node regexNode ;
2887
2876
RegexExecutionMethod method ;
2888
2877
2889
- CompiledRegexExecution ( ) { this .calls ( compiledRegex ( regexNode ) , method ) }
2878
+ CompiledRegexExecution ( ) {
2879
+ exists ( API:: Node regex | regexNode = regex .asSink ( ) |
2880
+ this .calls ( compiledRegex ( regex ) .getAValueReachableFromSource ( ) , method )
2881
+ )
2882
+ }
2890
2883
2891
2884
override DataFlow:: Node getRegex ( ) { result = regexNode }
2892
2885
0 commit comments