16 class SecurityNodeVisitor: |
16 class SecurityNodeVisitor: |
17 """ |
17 """ |
18 Class implementing an AST node visitor for security checks. |
18 Class implementing an AST node visitor for security checks. |
19 """ |
19 """ |
20 |
20 |
21 def __init__(self, checker, secCheckers, filename): |
21 def __init__(self, checker, secCheckers, filename, fileData): |
22 """ |
22 """ |
23 Constructor |
23 Constructor |
24 |
24 |
25 @param checker reference to the main security checker object |
25 @param checker reference to the main security checker object |
26 @type SecurityChecker |
26 @type SecurityChecker |
27 @param secCheckers dictionary containing the available checker routines |
27 @param secCheckers dictionary containing the available checker routines |
28 @type dict |
28 @type dict |
29 @param filename name of the checked file |
29 @param filename name of the checked file |
30 @type str |
30 @type str |
|
31 @param fileData contents of the checked file |
|
32 @type str |
31 """ |
33 """ |
32 self.__checker = checker |
34 self.__checker = checker |
33 self.__securityCheckers = secCheckers |
35 self.__securityCheckers = secCheckers |
34 |
36 |
35 self.seen = 0 |
|
36 self.depth = 0 |
37 self.depth = 0 |
37 self.filename = filename |
38 self.filename = filename |
|
39 self.fileData = fileData |
38 self.imports = set() |
40 self.imports = set() |
39 self.import_aliases = {} |
41 self.import_aliases = {} |
40 |
42 |
41 # in some cases we can't determine a qualified name |
43 # in some cases we can't determine a qualified name |
42 try: |
44 try: |
219 self.__context["end_col_offset"] = node.end_col_offset |
221 self.__context["end_col_offset"] = node.end_col_offset |
220 |
222 |
221 self.__context["node"] = node |
223 self.__context["node"] = node |
222 self.__context["linerange"] = SecurityUtils.linerange(node) |
224 self.__context["linerange"] = SecurityUtils.linerange(node) |
223 self.__context["filename"] = self.filename |
225 self.__context["filename"] = self.filename |
224 |
226 self.__context["filedata"] = self.fileData |
225 self.seen += 1 |
227 |
226 self.depth += 1 |
228 self.depth += 1 |
227 |
229 |
228 return True |
230 return True |
229 |
231 |
230 def visit(self, node): |
232 def visit(self, node): |
283 value._securityParent = node |
285 value._securityParent = node |
284 if self.__preVisit(value): |
286 if self.__preVisit(value): |
285 self.visit(value) |
287 self.visit(value) |
286 self.generic_visit(value) |
288 self.generic_visit(value) |
287 self.__postVisit(value) |
289 self.__postVisit(value) |
|
290 |
|
291 def checkFile(self): |
|
292 """ |
|
293 Public method to run File type checks, that don't operate on the AST. |
|
294 """ |
|
295 self.__runChecks("File") |