@@ -24,24 +24,33 @@ DataFlow::CallCfgNode outgoingRequestCall(string verb) {
2424 result = API:: moduleImport ( "requests" ) .getMember ( verb ) .getACall ( )
2525}
2626
27- /** Gets a reference to a falsey value (excluding None), with origin `origin`. */
28- private DataFlow:: TypeTrackingNode falseyNotNone ( DataFlow:: TypeTracker t , DataFlow:: Node origin ) {
27+ /** Gets the "verfiy" argument to a outgoingRequestCall. */
28+ DataFlow:: Node verifyArg ( DataFlow:: CallCfgNode call ) {
29+ call = outgoingRequestCall ( _) and
30+ result = call .getArgByName ( "verify" )
31+ }
32+
33+ /** Gets a back-reference to the verify argument `arg`. */
34+ private DataFlow:: TypeTrackingNode verifyArgBacktracker (
35+ DataFlow:: TypeBackTracker t , DataFlow:: Node arg
36+ ) {
2937 t .start ( ) and
30- result .asExpr ( ) .( ImmutableLiteral ) .booleanValue ( ) = false and
31- not result .asExpr ( ) instanceof None and
32- origin = result
38+ arg = verifyArg ( _) and
39+ result = arg .getALocalSource ( )
3340 or
34- exists ( DataFlow:: TypeTracker t2 | result = falseyNotNone ( t2 , origin ) . track ( t2 , t ) )
41+ exists ( DataFlow:: TypeBackTracker t2 | result = verifyArgBacktracker ( t2 , arg ) . backtrack ( t2 , t ) )
3542}
3643
37- /** Gets a reference to a falsey value (excluding None), with origin `origin `. */
38- DataFlow:: Node falseyNotNone ( DataFlow:: Node origin ) {
39- falseyNotNone ( DataFlow:: TypeTracker :: end ( ) , origin ) . flowsTo ( result )
44+ /** Gets a back- reference to the verify argument `arg `. */
45+ DataFlow:: LocalSourceNode verifyArgBacktracker ( DataFlow:: Node arg ) {
46+ result = verifyArgBacktracker ( DataFlow:: TypeBackTracker :: end ( ) , arg )
4047}
4148
4249from DataFlow:: CallCfgNode call , DataFlow:: Node falseyOrigin , string verb
4350where
4451 call = outgoingRequestCall ( verb ) and
52+ falseyOrigin = verifyArgBacktracker ( verifyArg ( call ) ) and
4553 // requests treats `None` as the default and all other "falsey" values as `False`.
46- call .getArgByName ( "verify" ) = falseyNotNone ( falseyOrigin )
54+ falseyOrigin .asExpr ( ) .( ImmutableLiteral ) .booleanValue ( ) = false and
55+ not falseyOrigin .asExpr ( ) instanceof None
4756select call , "Call to requests." + verb + " with verify=$@" , falseyOrigin , "False"
0 commit comments