@@ -96,7 +96,7 @@ def evaluate_var(xss_var, parent, until, ignore_nodes=None):
9696 break
9797 to = analyser .is_assigned (node )
9898 if to :
99- if isinstance (to , ast .Constant ):
99+ if isinstance (to , ast .Str ):
100100 secure = True
101101 elif isinstance (to , ast .Name ):
102102 secure = evaluate_var (to , parent , to .lineno , ignore_nodes )
@@ -105,7 +105,7 @@ def evaluate_var(xss_var, parent, until, ignore_nodes=None):
105105 elif isinstance (to , (list , tuple )):
106106 num_secure = 0
107107 for some_to in to :
108- if isinstance (some_to , ast .Constant ):
108+ if isinstance (some_to , ast .Str ):
109109 num_secure += 1
110110 elif isinstance (some_to , ast .Name ):
111111 if evaluate_var (
@@ -131,10 +131,7 @@ def evaluate_call(call, parent, ignore_nodes=None):
131131 secure = False
132132 evaluate = False
133133 if isinstance (call , ast .Call ) and isinstance (call .func , ast .Attribute ):
134- if (
135- isinstance (call .func .value , ast .Constant )
136- and call .func .attr == "format"
137- ):
134+ if isinstance (call .func .value , ast .Str ) and call .func .attr == "format" :
138135 evaluate = True
139136 if call .keywords :
140137 evaluate = False # TODO(??) get support for this
@@ -143,7 +140,7 @@ def evaluate_call(call, parent, ignore_nodes=None):
143140 args = list (call .args )
144141 num_secure = 0
145142 for arg in args :
146- if isinstance (arg , ast .Constant ):
143+ if isinstance (arg , ast .Str ):
147144 num_secure += 1
148145 elif isinstance (arg , ast .Name ):
149146 if evaluate_var (arg , parent , call .lineno , ignore_nodes ):
@@ -170,7 +167,7 @@ def evaluate_call(call, parent, ignore_nodes=None):
170167def transform2call (var ):
171168 if isinstance (var , ast .BinOp ):
172169 is_mod = isinstance (var .op , ast .Mod )
173- is_left_str = isinstance (var .left , ast .Constant )
170+ is_left_str = isinstance (var .left , ast .Str )
174171 if is_mod and is_left_str :
175172 new_call = ast .Call ()
176173 new_call .args = []
@@ -215,7 +212,7 @@ def check_risk(node):
215212 secure = evaluate_call (xss_var , parent )
216213 elif isinstance (xss_var , ast .BinOp ):
217214 is_mod = isinstance (xss_var .op , ast .Mod )
218- is_left_str = isinstance (xss_var .left , ast .Constant )
215+ is_left_str = isinstance (xss_var .left , ast .Str )
219216 if is_mod and is_left_str :
220217 parent = node ._bandit_parent
221218 while not isinstance (parent , (ast .Module , ast .FunctionDef )):
@@ -275,5 +272,5 @@ def django_mark_safe(context):
275272 ]
276273 if context .call_function_name in affected_functions :
277274 xss = context .node .args [0 ]
278- if not isinstance (xss , ast .Constant ):
275+ if not isinstance (xss , ast .Str ):
279276 return check_risk (context .node )
0 commit comments