Skip to content

Commit 36a846e

Browse files
committed
Python: Fix django regex path handling
1 parent c51c15a commit 36a846e

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

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

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2501,13 +2501,22 @@ module PrivateDjango {
25012501
// either using named capture groups (passed as keyword arguments) or using
25022502
// unnamed capture groups (passed as positional arguments)
25032503
not exists(regex.getGroupName(_, _)) and
2504-
// first group will have group number 1
2505-
result =
2506-
routeHandler
2507-
.getArg(routeHandler.getFirstPossibleRoutedParamIndex() - 1 +
2508-
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+
)
25092513
or
2510-
result = routeHandler.getArgByName(regex.getGroupName(_, _))
2514+
exists(regex.getGroupName(_, _)) and
2515+
(
2516+
result = routeHandler.getArgByName(regex.getGroupName(_, _))
2517+
or
2518+
result = routeHandler.getKwarg()
2519+
)
25112520
)
25122521
}
25132522
}

python/ql/test/library-tests/frameworks/django-v2-v3/routing_test.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -165,11 +165,11 @@ def kwargs_param(request, **kwargs): # $ requestHandler routedParameter=kwargs
165165
ensure_tainted(request) # $ tainted
166166

167167

168-
def star_args_param(request, *args): # $ requestHandler MISSING: routedParameter=args
168+
def star_args_param(request, *args): # $ requestHandler routedParameter=args
169169
ensure_tainted(
170-
args, # $ MISSING: tainted
171-
args[0], # $ MISSING: tainted
172-
args[1], # $ MISSING: tainted
170+
args, # $ tainted
171+
args[0], # $ tainted
172+
args[1], # $ tainted
173173
)
174174
ensure_tainted(request) # $ tainted
175175

0 commit comments

Comments
 (0)