@@ -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 .Str ):
99+ if isinstance (to , ast .Constant ):
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 .Str ):
108+ if isinstance (some_to , ast .Constant ):
109109 num_secure += 1
110110 elif isinstance (some_to , ast .Name ):
111111 if evaluate_var (
@@ -131,7 +131,10 @@ 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 isinstance (call .func .value , ast .Str ) and call .func .attr == "format" :
134+ if (
135+ isinstance (call .func .value , ast .Constant )
136+ and call .func .attr == "format"
137+ ):
135138 evaluate = True
136139 if call .keywords :
137140 evaluate = False # TODO(??) get support for this
@@ -140,7 +143,7 @@ def evaluate_call(call, parent, ignore_nodes=None):
140143 args = list (call .args )
141144 num_secure = 0
142145 for arg in args :
143- if isinstance (arg , ast .Str ):
146+ if isinstance (arg , ast .Constant ):
144147 num_secure += 1
145148 elif isinstance (arg , ast .Name ):
146149 if evaluate_var (arg , parent , call .lineno , ignore_nodes ):
@@ -167,7 +170,7 @@ def evaluate_call(call, parent, ignore_nodes=None):
167170def transform2call (var ):
168171 if isinstance (var , ast .BinOp ):
169172 is_mod = isinstance (var .op , ast .Mod )
170- is_left_str = isinstance (var .left , ast .Str )
173+ is_left_str = isinstance (var .left , ast .Constant )
171174 if is_mod and is_left_str :
172175 new_call = ast .Call ()
173176 new_call .args = []
@@ -212,7 +215,7 @@ def check_risk(node):
212215 secure = evaluate_call (xss_var , parent )
213216 elif isinstance (xss_var , ast .BinOp ):
214217 is_mod = isinstance (xss_var .op , ast .Mod )
215- is_left_str = isinstance (xss_var .left , ast .Str )
218+ is_left_str = isinstance (xss_var .left , ast .Constant )
216219 if is_mod and is_left_str :
217220 parent = node ._bandit_parent
218221 while not isinstance (parent , (ast .Module , ast .FunctionDef )):
@@ -272,5 +275,5 @@ def django_mark_safe(context):
272275 ]
273276 if context .call_function_name in affected_functions :
274277 xss = context .node .args [0 ]
275- if not isinstance (xss , ast .Str ):
278+ if not isinstance (xss , ast .Constant ):
276279 return check_risk (context .node )
0 commit comments