@@ -1549,8 +1549,16 @@ private module Django {
15491549 Parameter getRequestParam ( ) { result = this .getArg ( this .getRequestParamIndex ( ) ) }
15501550 }
15511551
1552+ /** A data-flow node that sets up a route on a server, using the django framework. */
15521553 abstract private class DjangoRouteSetup extends HTTP:: Server:: RouteSetup:: Range , DataFlow:: CfgNode {
1553- abstract override DjangoRouteHandler getARouteHandler ( ) ;
1554+ /** Gets the data-flow node that is used as the argument for the view handler. */
1555+ abstract DataFlow:: Node getViewArg ( ) ;
1556+
1557+ final override DjangoRouteHandler getARouteHandler ( ) {
1558+ exists ( DataFlow:: Node viewArg | viewArg = getViewArg ( ) |
1559+ djangoRouteHandlerFunctionTracker ( result ) = viewArg
1560+ )
1561+ }
15541562 }
15551563
15561564 /**
@@ -1576,11 +1584,8 @@ private module Django {
15761584 result .asCfgNode ( ) = [ node .getArg ( 0 ) , node .getArgByName ( "route" ) ]
15771585 }
15781586
1579- override DjangoRouteHandler getARouteHandler ( ) {
1580- exists ( DataFlow:: Node viewArg |
1581- viewArg .asCfgNode ( ) in [ node .getArg ( 1 ) , node .getArgByName ( "view" ) ] and
1582- djangoRouteHandlerFunctionTracker ( result ) = viewArg
1583- )
1587+ override DataFlow:: Node getViewArg ( ) {
1588+ result .asCfgNode ( ) in [ node .getArg ( 1 ) , node .getArgByName ( "view" ) ]
15841589 }
15851590
15861591 override Parameter getARoutedParameter ( ) {
@@ -1661,11 +1666,8 @@ private module Django {
16611666 result .asCfgNode ( ) = [ node .getArg ( 0 ) , node .getArgByName ( "route" ) ]
16621667 }
16631668
1664- override DjangoRouteHandler getARouteHandler ( ) {
1665- exists ( DataFlow:: Node viewArg |
1666- viewArg .asCfgNode ( ) in [ node .getArg ( 1 ) , node .getArgByName ( "view" ) ] and
1667- djangoRouteHandlerFunctionTracker ( result ) = viewArg
1668- )
1669+ override DataFlow:: Node getViewArg ( ) {
1670+ result .asCfgNode ( ) in [ node .getArg ( 1 ) , node .getArgByName ( "view" ) ]
16691671 }
16701672 }
16711673
@@ -1683,11 +1685,8 @@ private module Django {
16831685 result .asCfgNode ( ) = [ node .getArg ( 0 ) , node .getArgByName ( "regex" ) ]
16841686 }
16851687
1686- override DjangoRouteHandler getARouteHandler ( ) {
1687- exists ( DataFlow:: Node viewArg |
1688- viewArg .asCfgNode ( ) in [ node .getArg ( 1 ) , node .getArgByName ( "view" ) ] and
1689- djangoRouteHandlerFunctionTracker ( result ) = viewArg
1690- )
1688+ override DataFlow:: Node getViewArg ( ) {
1689+ result .asCfgNode ( ) in [ node .getArg ( 1 ) , node .getArgByName ( "view" ) ]
16911690 }
16921691 }
16931692
0 commit comments