@@ -2416,7 +2416,10 @@ module PrivateDjango {
24162416 // Since we don't know the URL pattern, we simply mark all parameters as a routed
24172417 // parameter. This should give us more RemoteFlowSources but could also lead to
24182418 // more FPs. If this turns out to be the wrong tradeoff, we can always change our mind.
2419- result in [ this .getArg ( _) , this .getArgByName ( _) ] and
2419+ result in [
2420+ this .getArg ( _) , this .getArgByName ( _) , //
2421+ this .getVararg ( ) .( Parameter ) , this .getKwarg ( ) .( Parameter ) , // TODO: These sources should be modeled as storing content!
2422+ ] and
24202423 not result = any ( int i | i < this .getFirstPossibleRoutedParamIndex ( ) | this .getArg ( i ) )
24212424 }
24222425
@@ -2452,13 +2455,20 @@ module PrivateDjango {
24522455 // more FPs. If this turns out to be the wrong tradeoff, we can always change our mind.
24532456 exists ( DjangoRouteHandler routeHandler | routeHandler = this .getARequestHandler ( ) |
24542457 not exists ( this .getUrlPattern ( ) ) and
2455- result in [ routeHandler .getArg ( _) , routeHandler .getArgByName ( _) ] and
2458+ result in [
2459+ routeHandler .getArg ( _) , routeHandler .getArgByName ( _) , //
2460+ routeHandler .getVararg ( ) .( Parameter ) , routeHandler .getKwarg ( ) .( Parameter ) , // TODO: These sources should be modeled as storing content!
2461+ ] and
24562462 not result =
24572463 any ( int i | i < routeHandler .getFirstPossibleRoutedParamIndex ( ) | routeHandler .getArg ( i ) )
24582464 )
24592465 or
24602466 exists ( string name |
2461- result = this .getARequestHandler ( ) .getArgByName ( name ) and
2467+ (
2468+ result = this .getARequestHandler ( ) .getKwarg ( ) // TODO: These sources should be modeled as storing content!
2469+ or
2470+ result = this .getARequestHandler ( ) .getArgByName ( name )
2471+ ) and
24622472 exists ( string match |
24632473 match = this .getUrlPattern ( ) .regexpFind ( pathRoutedParameterRegex ( ) , _, _) and
24642474 name = match .regexpCapture ( pathRoutedParameterRegex ( ) , 2 )
@@ -2475,7 +2485,10 @@ module PrivateDjango {
24752485 // more FPs. If this turns out to be the wrong tradeoff, we can always change our mind.
24762486 exists ( DjangoRouteHandler routeHandler | routeHandler = this .getARequestHandler ( ) |
24772487 not exists ( this .getUrlPattern ( ) ) and
2478- result in [ routeHandler .getArg ( _) , routeHandler .getArgByName ( _) ] and
2488+ result in [
2489+ routeHandler .getArg ( _) , routeHandler .getArgByName ( _) , //
2490+ routeHandler .getVararg ( ) .( Parameter ) , routeHandler .getKwarg ( ) .( Parameter ) , // TODO: These sources should be modeled as storing content!
2491+ ] and
24792492 not result =
24802493 any ( int i | i < routeHandler .getFirstPossibleRoutedParamIndex ( ) | routeHandler .getArg ( i ) )
24812494 )
@@ -2488,13 +2501,22 @@ module PrivateDjango {
24882501 // either using named capture groups (passed as keyword arguments) or using
24892502 // unnamed capture groups (passed as positional arguments)
24902503 not exists ( regex .getGroupName ( _, _) ) and
2491- // first group will have group number 1
2492- result =
2493- routeHandler
2494- .getArg ( routeHandler .getFirstPossibleRoutedParamIndex ( ) - 1 +
2495- regex .getGroupNumber ( _, _) )
2504+ (
2505+ // first group will have group number 1
2506+ result =
2507+ routeHandler
2508+ .getArg ( routeHandler .getFirstPossibleRoutedParamIndex ( ) - 1 +
2509+ regex .getGroupNumber ( _, _) )
2510+ or
2511+ result = routeHandler .getVararg ( )
2512+ )
24962513 or
2497- result = routeHandler .getArgByName ( regex .getGroupName ( _, _) )
2514+ exists ( regex .getGroupName ( _, _) ) and
2515+ (
2516+ result = routeHandler .getArgByName ( regex .getGroupName ( _, _) )
2517+ or
2518+ result = routeHandler .getKwarg ( )
2519+ )
24982520 )
24992521 }
25002522 }
0 commit comments