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

Skip to content

Commit ffdbecf

Browse files
committed
Python: Simplify getARouteHandler for Django
1 parent 0f5f0ed commit ffdbecf

1 file changed

Lines changed: 15 additions & 16 deletions

File tree

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

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)