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