@@ -96,7 +96,7 @@ def evaluate_var(xss_var, parent, until, ignore_nodes=None):
96
96
break
97
97
to = analyser .is_assigned (node )
98
98
if to :
99
- if isinstance (to , ast .Str ):
99
+ if isinstance (to , ast .Constant ):
100
100
secure = True
101
101
elif isinstance (to , ast .Name ):
102
102
secure = evaluate_var (to , parent , to .lineno , ignore_nodes )
@@ -105,7 +105,7 @@ def evaluate_var(xss_var, parent, until, ignore_nodes=None):
105
105
elif isinstance (to , (list , tuple )):
106
106
num_secure = 0
107
107
for some_to in to :
108
- if isinstance (some_to , ast .Str ):
108
+ if isinstance (some_to , ast .Constant ):
109
109
num_secure += 1
110
110
elif isinstance (some_to , ast .Name ):
111
111
if evaluate_var (
@@ -131,7 +131,10 @@ def evaluate_call(call, parent, ignore_nodes=None):
131
131
secure = False
132
132
evaluate = False
133
133
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
+ ):
135
138
evaluate = True
136
139
if call .keywords :
137
140
evaluate = False # TODO(??) get support for this
@@ -140,7 +143,7 @@ def evaluate_call(call, parent, ignore_nodes=None):
140
143
args = list (call .args )
141
144
num_secure = 0
142
145
for arg in args :
143
- if isinstance (arg , ast .Str ):
146
+ if isinstance (arg , ast .Constant ):
144
147
num_secure += 1
145
148
elif isinstance (arg , ast .Name ):
146
149
if evaluate_var (arg , parent , call .lineno , ignore_nodes ):
@@ -167,7 +170,7 @@ def evaluate_call(call, parent, ignore_nodes=None):
167
170
def transform2call (var ):
168
171
if isinstance (var , ast .BinOp ):
169
172
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 )
171
174
if is_mod and is_left_str :
172
175
new_call = ast .Call ()
173
176
new_call .args = []
@@ -212,7 +215,7 @@ def check_risk(node):
212
215
secure = evaluate_call (xss_var , parent )
213
216
elif isinstance (xss_var , ast .BinOp ):
214
217
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 )
216
219
if is_mod and is_left_str :
217
220
parent = node ._bandit_parent
218
221
while not isinstance (parent , (ast .Module , ast .FunctionDef )):
@@ -272,5 +275,5 @@ def django_mark_safe(context):
272
275
]
273
276
if context .call_function_name in affected_functions :
274
277
xss = context .node .args [0 ]
275
- if not isinstance (xss , ast .Str ):
278
+ if not isinstance (xss , ast .Constant ):
276
279
return check_risk (context .node )
0 commit comments